<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>MyTechBook</title>
        
    <link rel="stylesheet" type="text/css" href="../../static/css/main.css">
</head>
<body>
<div class="navbar navbar-line">
    <div class="container">
        <div class="logo">
            
                MyTechBook
            
        </div>
        <input type="checkbox" id="idoc_nav" />
        <div class="menu_tree">
        <ul><li><a href="../../index.html">首页</a></li><li><a href="#"><span></span>前沿观察</a><ul><li><a href="../../html/前沿观察/ECMAScript 6入门.html">ECMAScript 6入门</a></li><li><a href="../../html/前沿观察/Immutable详解及React中实践.html">Immutable详解及React中实践</a></li><li><a href="../../html/前沿观察/Node.js MVC框架ThinkJS.html">Node.js MVC框架ThinkJS</a></li><li><a href="../../html/前沿观察/Nodejs 5.0.0版本.html">Nodejs 5.0.0版本</a></li><li><a href="../../html/前沿观察/关系型数据库PostgreSQL.html">关系型数据库PostgreSQL</a></li><li><a href="../../html/前沿观察/轻型MVVM框架Vue.js.html">轻型MVVM框架Vue.js</a></li><li><a href="../../html/前沿观察/基于nodejs的开发框架koa.html">基于nodejs的开发框架koa</a></li></ul></li><li><a href="#"><span></span>前端工程化</a><ul><li><a href="../../html/前端工程化/前端模板.html">前端模板</a></li><li><a href="../../html/前端工程化/性能优化和前端工程的爱恨情仇.html">性能优化和前端工程的爱恨情仇</a></li><li><a href="../../html/前端工程化/webpack入门及实践.html">webpack入门及实践</a></li><li><a href="../../html/前端工程化/前端工程化不完全装逼指南.html">前端工程化不完全装逼指南</a></li></ul></li><li><a href="#"><span></span>性能优化</a><ul><li><a href="../../html/性能优化/jshint代码质量检测.html">jshint代码质量检测</a></li><li><a href="../../html/性能优化/jshint配置说明.html">jshint配置说明</a></li><li><a href="../../html/性能优化/NC性能优化.html">NC性能优化</a></li><li><a href="../../html/性能优化/React编码规范.html">React编码规范</a></li><li><a href="../../html/性能优化/性能优化待办事项.html">性能优化待办事项</a></li><li><a href="../../html/性能优化/性能优化点总结.html">性能优化点总结</a></li></ul></li><li><a href="#"><span></span>技术分享</a><ul><li><a href="../../html/技术分享/React技术分享.html">React技术分享</a></li><li><a href="../../html/技术分享/学习Git.html">学习Git</a></li><li><a href="../../html/技术分享/面向对象.html">面向对象</a></li><li class="active"><a href="../../html/技术分享/Node.js知识详解.html">Node.js知识详解</a></li><li><a href="../../html/技术分享/2015年大前端技术年终总结.html">2015年大前端技术年终总结</a></li></ul></li><li><a href="#"><span></span>随想笔记</a><ul><li><a href="../../html/随想笔记/项目技术栈规划.html">项目技术栈规划</a></li><li><a href="../../html/随想笔记/笔试面试大纲.html">笔试面试大纲</a></li></ul></li><li><a href="../../html/CONTACT.html">CONTACT</a></li></ul>    
        </div>
        
        
        <div class="forkgithub"><a target="_blank" href="https://github.com/sujunming">fork on github</a></div>
        

        <section class="idoc_nav_btn">
            <label for="idoc_nav"><span></span></label>
        </section>
    </div>
    
</div>




<div class="container">

    <div class="page-toc">
        <ul><li><a href="#t0Node.js知识学习">Node.js知识学习</a></li><li><a href="#t1Chapter 1 -- Node.js入门知识">Chapter 1 -- Node.js入门知识</a><ul><li><a href="#t2基本介绍">基本介绍</a></li><li><a href="#t3为什么要学nodejs">为什么要学nodejs</a><ul><li><a href="#t4Nodejs市场活跃">Nodejs市场活跃</a></li><li><a href="#t5Nodejs应用广泛">Nodejs应用广泛</a></li><li><a href="#t6推荐关注">推荐关注</a></li></ul></li><li><a href="#t7NodeJS优缺点及适用场景讨论">NodeJS优缺点及适用场景讨论</a><ul><li><a href="#t8解决并发连接的问题">解决并发连接的问题</a></li><li><a href="#t9解决I/O阻塞的问题">解决I/O阻塞的问题</a></li><li><a href="#t10综合对比分析">综合对比分析</a></li></ul></li></ul></li><li><a href="#t11Chapter 2 -- Node.js基础知识">Chapter 2 -- Node.js基础知识</a><ul><li><a href="#t12安装">安装</a><ul><li><a href="#t13windows上安装">windows上安装</a></li><li><a href="#t14mac上安装">mac上安装</a></li><li><a href="#t15linux上安装">linux上安装</a></li><li><a href="#t16版本说明">版本说明</a></li></ul></li><li><a href="#t17node初体验">node初体验</a><ul><li><a href="#t18nodejs的REPL交互环境">nodejs的REPL交互环境</a></li><li><a href="#t19写个脚本">写个脚本</a></li><li><a href="#t20起个web服务">起个web服务</a></li></ul></li><li><a href="#t21Nodejs模块概述">Nodejs模块概述</a><ul><li><a href="#t22加载模块">加载模块</a></li><li><a href="#t23核心模块">核心模块</a></li><li><a href="#t24自定义模块">自定义模块</a></li></ul></li><li><a href="#t25commonjs代码规范说明">commonjs代码规范说明</a><ul><li><a href="#t26module对象">module对象</a></li><li><a href="#t27require命令的解读">require命令的解读</a></li><li><a href="#t28require加载模块的规则">require加载模块的规则</a></li></ul></li><li><a href="#t29npm包管理器">npm包管理器</a><ul><li><a href="#t30介绍">介绍</a></li><li><a href="#t31全局配置">全局配置</a></li><li><a href="#t32学习使用">学习使用</a></li></ul></li></ul></li><li><a href="#t33Chapter 3 -- Nodejs中的对象和核心API">Chapter 3 -- Nodejs中的对象和核心API</a><ul><li><a href="#t34node中常用的全局对象">node中常用的全局对象</a><ul><li><a href="#t35Console对象">Console对象</a></li><li><a href="#t36Buffer对象">Buffer对象</a></li><li><a href="#t37几个重要的模块内部的局部变量">几个重要的模块内部的局部变量</a></li><li><a href="#t38path对象">path对象</a></li><li><a href="#t39stream流对象">stream流对象</a></li><li><a href="#t40process">process</a></li></ul></li><li><a href="#t41学习node中的核心模块">学习node中的核心模块</a><ul><li><a href="#t42Fs模块">Fs模块</a></li><li><a href="#t43Http模块">Http模块</a></li><li><a href="#t44Events模块和异步编程">Events模块和异步编程</a></li></ul></li></ul></li><li><a href="#t45Chapter 4 -- Node.js开发实战">Chapter 4 -- Node.js开发实战</a><ul><li><a href="#t46express的使用">express的使用</a><ul><li><a href="#t47介绍">介绍</a></li><li><a href="#t48安装">安装</a></li><li><a href="#t49生成项目脚手架代码">生成项目脚手架代码</a></li></ul></li><li><a href="#t50ejs">ejs</a></li><li><a href="#t51angular">angular</a></li><li><a href="#t52mongodb">mongodb</a></li></ul></li></ul>
    </div>
    
    <div class="content markdown-body">
        <h1 style="text-align:center;color:blue;font-size:44px;" id="t0Node.js&#x77E5;&#x8BC6;&#x5B66;&#x4E60;">Node.js&#x77E5;&#x8BC6;&#x5B66;&#x4E60; <a href="#t0Node.js&#x77E5;&#x8BC6;&#x5B66;&#x4E60;"> # </a></h1>

<p><img width="840" src="../..//img/node.png"></p>
<h1 id="t1Chapter 1 -- Node.js&#x5165;&#x95E8;&#x77E5;&#x8BC6;">Chapter 1 -- Node.js&#x5165;&#x95E8;&#x77E5;&#x8BC6; <a href="#t1Chapter 1 -- Node.js&#x5165;&#x95E8;&#x77E5;&#x8BC6;"> # </a></h1>
<blockquote>
<p>&#x5BFC;&#x8BFB;&#xFF1A;&#x5728;&#x8FD9;&#x4E00;&#x90E8;&#x5206;&#x7684;&#x5185;&#x5BB9;&#x91CC;&#xFF0C;&#x4E3B;&#x8981;&#x4F1A;&#x7B80;&#x5355;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B;&#x4EC0;&#x4E48;&#x662F;Node.js&#xFF0C;&#x5B83;&#x6709;&#x54EA;&#x4E9B;&#x7528;&#x6B66;&#x4E4B;&#x5730;&#xFF0C;&#x6211;&#x4EEC;&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x53BB;&#x5B66;&#x4E60;&#x5B83;&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x8FD8;&#x4F1A;&#x7B80;&#x5355;&#x7684;&#x8BA8;&#x8BBA;&#x4E0B;Nodejs&#x7684;&#x4F18;&#x7F3A;&#x70B9;&#x4EE5;&#x53CA;&#x9002;&#x7528;&#x573A;&#x666F;&#x3002;</p>
</blockquote>
<h2 id="t2&#x57FA;&#x672C;&#x4ECB;&#x7ECD;">&#x57FA;&#x672C;&#x4ECB;&#x7ECD; <a href="#t2&#x57FA;&#x672C;&#x4ECB;&#x7ECD;"> # </a></h2>
<p><strong>Node.js &#x662F;&#x4E00;&#x4E2A;&#x57FA;&#x4E8E; Chrome V8 &#x5F15;&#x64CE;&#x7684; JavaScript &#x8FD0;&#x884C;&#x73AF;&#x5883;&#x3002;Node.js &#x4F7F;&#x7528;&#x4E86;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x3001;&#x975E;&#x963B;&#x585E;&#x5F0F; I/O &#x7684;&#x6A21;&#x578B;&#xFF0C;&#x4F7F;&#x5176;&#x8F7B;&#x91CF;&#x53C8;&#x9AD8;&#x6548;&#x3002;Node.js &#x7684;&#x5305;&#x7BA1;&#x7406;&#x5668; npm&#xFF0C;&#x662F;&#x5168;&#x7403;&#x6700;&#x5927;&#x7684;&#x5F00;&#x6E90;&#x5E93;&#x751F;&#x6001;&#x7CFB;&#x7EDF;&#x3002;</strong></p>
<p>&#x4EE5;&#x4E0A;&#x63D0;&#x5230;&#x7684;<strong>&#x8FD0;&#x884C;&#x73AF;&#x5883;</strong>&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x8FD9;&#x6837;&#x7406;&#x89E3;&#xFF1A;</p>
<blockquote>
<p>JS&#x672C;&#x8EAB;&#x662F;&#x811A;&#x672C;&#x8BED;&#x8A00;&#xFF0C;&#x811A;&#x672C;&#x8BED;&#x8A00;&#x90FD;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x89E3;&#x6790;&#x5668;&#x624D;&#x80FD;&#x8FD0;&#x884C;&#x3002;&#x5BF9;&#x4E8E;&#x5199;&#x5728;HTML&#x9875;&#x9762;&#x91CC;&#x7684;JS&#xFF0C;&#x6D4F;&#x89C8;&#x5668;&#x5145;&#x5F53;&#x4E86;&#x89E3;&#x6790;&#x5668;&#x7684;&#x89D2;&#x8272;&#x3002;
&#x800C;&#x5BF9;&#x4E8E;&#x9700;&#x8981;&#x72EC;&#x7ACB;&#x8FD0;&#x884C;&#x7684;JS&#xFF0C;NodeJS&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x89E3;&#x6790;&#x5668;&#xFF0C;&#x662F;JS&#x8BED;&#x8A00;&#x7684;&#x670D;&#x52A1;&#x5668;&#x8FD0;&#x884C;&#x73AF;&#x5883;&#xFF0C;&#x4F7F;&#x5176;&#x6D41;&#x7545;&#x7684;&#x8FD0;&#x884C;&#x4E8E;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x3002;</p>
</blockquote>
<p><strong>Nodejs&#x7684;&#x7279;&#x70B9;&#x662F;&#xFF1A;</strong></p>
<ol>
<li><p>JavaScript&#x8FD0;&#x884C;&#x73AF;&#x5883;&#xFF0C;&#x76F8;&#x5F53;&#x4E8E;js&#x5728;&#x670D;&#x52A1;&#x7AEF;&#x7684;&#x4E00;&#x4E2A;&#x5BBF;&#x4E3B;&#x73AF;&#x5883;</p>
</li>
<li><p>&#x4F9D;&#x8D56;&#x4E8E;Chrome V8&#x5F15;&#x64CE;&#x8FDB;&#x884C;&#x4EE3;&#x7801;&#x89E3;&#x91CA;&#xFF0C;V8&#x5F15;&#x64CE;&#x6267;&#x884C;Javascript&#x7684;&#x901F;&#x5EA6;&#x975E;&#x5E38;&#x5FEB;&#xFF0C;&#x6027;&#x80FD;&#x975E;&#x5E38;&#x597D;&#x3002;</p>
</li>
<li><p>&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;</p>
</li>
<li><p>&#x975E;&#x963B;&#x585E;I/O</p>
</li>
<li><p>&#x8F7B;&#x91CF;&#x3001;&#x53EF;&#x4F38;&#x7F29;&#xFF0C;&#x9002;&#x4E8E;&#x5B9E;&#x65F6;&#x6570;&#x636E;&#x4EA4;&#x4E92;&#x5E94;&#x7528;</p>
</li>
<li><p>&#x5355;&#x8FDB;&#x7A0B;&#xFF0C;&#x5355;&#x7EBF;&#x7A0B;</p>
</li>
<li><p>Node&#x63D0;&#x4F9B;&#x6838;&#x5FC3;&#x529F;&#x80FD;&#x6A21;&#x5757;&#xFF0C;&#x4F7F;&#x5F97;JavaScript&#x8BED;&#x8A00;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x6587;&#x4EF6;&#x7684;&#x8BFB;&#x5199;&#x3001;&#x8FDB;&#x7A0B;&#x7BA1;&#x7406;&#x4EE5;&#x53CA;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x7B49;&#x529F;&#x80FD;&#xFF0C;&#x5728;&#x8FD9;&#x4E2A;&#x610F;&#x4E49;&#x4E0A;&#xFF0C;Node&#x53C8;&#x662F;JavaScript&#x7684;&#x5DE5;&#x5177;&#x5E93;&#x3002;</p>
</li>
</ol>
<h2 id="t3&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5B66;nodejs">&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5B66;nodejs <a href="#t3&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5B66;nodejs"> # </a></h2>
<p>&#x5305;&#x62EC;&#x4F46;&#x4E0D;&#x9650;&#x4E8E;&#x4EE5;&#x4E0B;&#x51E0;&#x70B9;&#x3002;</p>
<h3 id="t4Nodejs&#x5E02;&#x573A;&#x6D3B;&#x8DC3;">Nodejs&#x5E02;&#x573A;&#x6D3B;&#x8DC3; <a href="#t4Nodejs&#x5E02;&#x573A;&#x6D3B;&#x8DC3;"> # </a></h3>
<ul>
<li>&#x4ECE;<a href="https://www.npmjs.com/">npmjs.org</a>&#x793E;&#x533A;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x6709;&#x8D85;&#x8FC7;20W&#x7684;&#x7B2C;&#x4E09;&#x65B9;package&#xFF0C;&#x6BCF;&#x5929;&#x4EBF;&#x7EA7;&#x4EE5;&#x4E0A;&#x7684;&#x4E0B;&#x8F7D;&#x91CF;&#x3002;</li>
<li><a href="https://github.com/">github.com</a>&#x4E0A;&#x641C;&#x7D22;node&#x76F8;&#x5173;&#x7684;&#x9879;&#x76EE;&#xFF0C;15&#x4E07;&#x4E2A;&#x4EE5;&#x4E0A;&#x3002;</li>
<li>&#x800C;&#x4E14;&#x793E;&#x533A;&#x975E;&#x5E38;&#x6D3B;&#x8DC3;&#xFF0C;&#x53C2;&#x4E0E;&#x7684;&#x5F00;&#x53D1;&#x8005;&#x4F17;&#x591A;</li>
</ul>
<h3 id="t5Nodejs&#x5E94;&#x7528;&#x5E7F;&#x6CDB;">Nodejs&#x5E94;&#x7528;&#x5E7F;&#x6CDB; <a href="#t5Nodejs&#x5E94;&#x7528;&#x5E7F;&#x6CDB;"> # </a></h3>
<p>&#x6211;&#x4EEC;&#x6765;&#x770B;&#x4F7F;&#x7528;nodejs&#x53EF;&#x4EE5;&#x505A;&#x4EC0;&#x4E48;&#xFF1A;</p>
<ul>
<li>&#x9879;&#x76EE;&#x7BA1;&#x7406;&#xFF1A;npm,grunt, gulp,bower, yeoman</li>
<li>&#x684C;&#x9762;&#x5E94;&#x7528;: node-webkit</li>
<li>Web&#x5F00;&#x53D1;&#xFF1A;express,ejs,hexo, socket.io, restify, cleaver, stylus, browserify,cheerio</li>
<li>&#x5DE5;&#x5177;&#x5305; underscore,moment,connet,later,log4js,passport,passport(oAuth),domain,require,reap,commander,retry,PDFkit</li>
<li>&#x6570;&#x636E;&#x5E93;&#xFF1A;mysql,mongoose,redis,memcached</li>
<li>&#x5F02;&#x6B65;&#xFF1A;async,wind,eventProxy,bluebird</li>
<li>&#x90E8;&#x7F72;&#xFF1A;forever,pm2,nodemon</li>
<li>&#x6D4B;&#x8BD5;&#xFF1A;jasmine,karma,protractor</li>
<li>&#x8DE8;&#x5E73;&#x53F0;&#xFF1A;rio,tty</li>
<li>&#x5185;&#x6838;&#xFF1A;cluster,http,request</li>
<li>&#x6A21;&#x677F;: jade</li>
<li>&#x535A;&#x5BA2;: ghost,hexo</li>
<li>&#x5FAE;&#x4FE1;: weui</li>
<li>&#x786C;&#x4EF6;&#x63A7;&#x5236;: NoduinoWeb</li>
<li>&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;: NodeOS</li>
</ul>
<blockquote>
<p>&#x53EF;&#x4EE5;&#x8FD9;&#x4E48;&#x8BF4;&#xFF0C;&#x5176;&#x4ED6;&#x8BED;&#x8A00;&#x80FD;&#x505A;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;nodejs&#x90FD;&#x53EF;&#x4EE5;&#x505A;&#xFF0C;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x505A;&#x7684;&#x66F4;&#x597D;&#xFF08;&#x4E0D;&#x77E5;&#x9053;&#x8FD9;&#x6837;&#x8BF4;&#x4F1A;&#x88AB;&#x4F1A;&#x88AB;&#x4EBA;&#x55B7;&#xFF09;&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x66F4;&#x9700;&#x8981;&#x7ED3;&#x5408;&#x4E1A;&#x52A1;&#x5177;&#x4F53;&#x5206;&#x6790;&#x8FDB;&#x884C;&#x6280;&#x672F;&#x9009;&#x578B;&#x3002;</p>
</blockquote>
<h3 id="t6&#x63A8;&#x8350;&#x5173;&#x6CE8;">&#x63A8;&#x8350;&#x5173;&#x6CE8; <a href="#t6&#x63A8;&#x8350;&#x5173;&#x6CE8;"> # </a></h3>
<ol>
<li><p><a href="https://github.com/">github</a>&#xFF1A;&#x5728;&#x8FD9;&#x91CC;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x5927;&#x91CF;nodejs&#x76F8;&#x5173;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x9605;&#x8BFB;&#x6E90;&#x7801;&#x6E90;&#x7801;&#xFF0C;&#x67E5;&#x770B;&#x65B0;&#x6280;&#x672F;&#x7684;&#x4E00;&#x624B;&#x8D44;&#x6599;</p>
</li>
<li><p><a href="https://nodejs.org">nodejs&#x5B98;&#x7F51;</a>&#xFF1A;&#x5173;&#x6CE8;Node&#x7248;&#x672C;&#x66F4;&#x65B0;&#xFF0C;&#x5305;&#x62EC;api&#x529F;&#x80FD;&#x53CA;&#x4F7F;&#x7528;&#x3001;bug&#x4FEE;&#x590D;&#x3001;&#x65B0;&#x589E;&#x7279;&#x6027;&#x4EE5;&#x53CA;&#x672A;&#x6765;&#x7684;&#x53D1;&#x5C55;&#x8D8B;&#x52BF;</p>
</li>
<li><p><a href="https://www.npmjs.com/">npm&#x5B98;&#x7F51;</a>&#xFF1A;&#x5728;&#x8FD9;&#x91CC;&#x641C;&#x7D22;&#x4F60;&#x60F3;&#x7528;&#x7684;&#x5305;&#xFF0C;&#x53C2;&#x8003;&#x522B;&#x4EBA;&#x7684;&#x6E90;&#x4EE3;&#x7801;</p>
</li>
<li><p><a href="http://stackoverflow.com/">stackoverflow&#x95EE;&#x7B54;&#x793E;&#x533A;</a>&#xFF1A;&#x6709;&#x4EC0;&#x4E48;&#x7591;&#x60D1;&#x76F4;&#x63A5;&#x5728;&#x8FD9;&#x5F00;&#x95EE;&#x5427;&#xFF0C;&#x4F1A;&#x6709;&#x5F88;&#x591A;&#x70ED;&#x60C5;&#x7684;&#x597D;&#x57FA;&#x53CB;&#x6765;&#x5E2E;&#x4F60;&#x89E3;&#x7B54;&#x95EE;&#x9898;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x670D;&#x52A1;&#x5F02;&#x5E38;&#x3001;&#x914D;&#x7F6E;&#x4EC0;&#x4E48;&#x7684;&#x3002;</p>
</li>
</ol>
<h2 id="t7NodeJS&#x4F18;&#x7F3A;&#x70B9;&#x53CA;&#x9002;&#x7528;&#x573A;&#x666F;&#x8BA8;&#x8BBA;">NodeJS&#x4F18;&#x7F3A;&#x70B9;&#x53CA;&#x9002;&#x7528;&#x573A;&#x666F;&#x8BA8;&#x8BBA; <a href="#t7NodeJS&#x4F18;&#x7F3A;&#x70B9;&#x53CA;&#x9002;&#x7528;&#x573A;&#x666F;&#x8BA8;&#x8BBA;"> # </a></h2>
<p>&#x57FA;&#x4E8E;&#x4EE5;&#x4E0A;&#x63D0;&#x53CA;&#x7684;Nodejs&#x7279;&#x6027;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x770B;&#x5728;&#x5B9E;&#x9645;&#x7CFB;&#x7EDF;&#x95EE;&#x9898;&#x4E2D;&#x662F;&#x5982;&#x4F55;&#x4F53;&#x73B0;&#x5176;&#x4F18;&#x52BF;&#x7684;&#x3002;</p>
<p>Nodejs&#x7684;&#x51FA;&#x73B0;&#x4E3A;&#x6211;&#x4EEC;&#x89E3;&#x51B3;&#x73B0;&#x5B9E;&#x5F53;&#x4E2D;&#x7CFB;&#x7EDF;&#x74F6;&#x9888;&#x63D0;&#x4F9B;&#x4E86;&#x65B0;&#x7684;&#x601D;&#x8DEF;&#x548C;&#x65B9;&#x6848;</p>
<h4 id="t8&#x89E3;&#x51B3;&#x5E76;&#x53D1;&#x8FDE;&#x63A5;&#x7684;&#x95EE;&#x9898;">&#x89E3;&#x51B3;&#x5E76;&#x53D1;&#x8FDE;&#x63A5;&#x7684;&#x95EE;&#x9898; <a href="#t8&#x89E3;&#x51B3;&#x5E76;&#x53D1;&#x8FDE;&#x63A5;&#x7684;&#x95EE;&#x9898;"> # </a></h4>
<p>&#x5BF9;&#x4E8E;&#x5E76;&#x53D1;&#x8FDE;&#x63A5;&#x7684;&#x95EE;&#x9898;&#x8BA8;&#x8BBA;&#xFF0C;&#x4E3A;&#x4E86;&#x6709;&#x66F4;&#x76F4;&#x89C2;&#x7684;&#x7406;&#x89E3;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x770B;&#x4EE5;&#x4E0B;&#x4E09;&#x4E2A;&#x6A21;&#x578B;&#xFF1A;</p>
<ul>
<li>&#x7CFB;&#x7EDF;&#x7EBF;&#x7A0B;&#x6A21;&#x578B;</li>
</ul>
<p><img src="../..//img/model1.jpg" alt=""></p>
<p>&#x8FD9;&#x79CD;&#x6A21;&#x578B;&#x7684;&#x95EE;&#x9898;&#x663E;&#x800C;&#x6613;&#x89C1;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x5E76;&#x53D1;&#x8BF7;&#x6C42;&#xFF08;&#x7528;&#x6237;&#xFF09;&#x5230;&#x8FBE;&#x53EA;&#x80FD;&#x5904;&#x7406;&#x4E00;&#x4E2A;&#xFF0C;&#x5176;&#x4F59;&#x7684;&#x8981;&#x5148;&#x7B49;&#x5F85;&#xFF0C;&#x8FD9;&#x5C31;&#x662F;&#x963B;&#x585E;&#xFF0C;&#x6B63;&#x5728;&#x4EAB;&#x53D7;&#x670D;&#x52A1;&#x7684;&#x8BF7;&#x6C42;&#x963B;&#x585E;&#x540E;&#x9762;&#x7684;&#x8BF7;&#x6C42;&#x4E86;&#x3002;</p>
<ul>
<li>&#x591A;&#x7EBF;&#x7A0B;&#x3001;&#x7EBF;&#x7A0B;&#x6C60;&#x6A21;&#x578B;</li>
</ul>
<p><img src="../..//img/model2.jpg" alt=""></p>
<p>&#x8FD9;&#x4E2A;&#x6A21;&#x578B;&#x5DF2;&#x7ECF;&#x6BD4;&#x4E0A;&#x4E00;&#x4E2A;&#x6709;&#x6240;&#x8FDB;&#x6B65;&#xFF0C;&#x5B83;&#x8C03;&#x8282;&#x670D;&#x52A1;&#x7AEF;&#x7EBF;&#x7A0B;&#x7684;&#x6570;&#x91CF;&#x6765;&#x63D0;&#x9AD8;&#x5BF9;&#x5E76;&#x53D1;&#x8BF7;&#x6C42;&#x7684;&#x63A5;&#x6536;&#x548C;&#x54CD;&#x5E94;&#xFF0C;&#x4F46;&#x5E76;&#x53D1;&#x91CF;&#x9AD8;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8BF7;&#x6C42;&#x4ECD;&#x7136;&#x9700;&#x8981;&#x7B49;&#x5F85;&#x3002;&#x5B83;&#x6709;&#x4E2A;&#x66F4;&#x4E25;&#x91CD;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5373;&#x670D;&#x52A1;&#x7AEF;&#x4E0E;&#x5BA2;&#x6237;&#x7AEF;&#x6BCF;&#x5EFA;&#x7ACB;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#xFF0C;&#x90FD;&#x8981;&#x4E3A;&#x8FD9;&#x4E2A;&#x8FDE;&#x63A5;&#x5206;&#x914D;&#x4E00;&#x5957;&#x914D;&#x5957;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x4E3B;&#x8981;&#x4F53;&#x73B0;&#x4E3A;&#x7CFB;&#x7EDF;&#x5185;&#x5B58;&#x8D44;&#x6E90;&#xFF0C;&#x4EE5;PHP&#x4E3A;&#x4F8B;&#xFF0C;&#x7EF4;&#x62A4;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#x53EF;&#x80FD;&#x9700;&#x8981;20M&#x7684;&#x5185;&#x5B58;&#x3002;&#x8FD9;&#x5C31;&#x662F;&#x4E3A;&#x4EC0;&#x4E48;&#x4E00;&#x822C;&#x5E76;&#x53D1;&#x91CF;&#x4E00;&#x5927;&#xFF0C;&#x5C31;&#x9700;&#x8981;&#x591A;&#x5F00;&#x670D;&#x52A1;&#x5668;&#x7684;&#x539F;&#x56E0;&#x3002;</p>
<ul>
<li>&#x5F02;&#x6B65;&#x3001;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;</li>
</ul>
<p>&#x90A3;&#x4E48;&#x6211;&#x4EEC;&#x6765;&#x770B;nodejs&#x662F;&#x5982;&#x4F55;&#x5904;&#x7406;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x7684;</p>
<p><img src="../..//img/model3.jpg" alt=""></p>
<p>&#x6211;&#x4EEC;&#x540C;&#x6837;&#x662F;&#x8981;&#x53D1;&#x8D77;&#x8BF7;&#x6C42;&#xFF0C;&#x7B49;&#x5F85;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x54CD;&#x5E94;&#xFF1B;&#x4F46;&#x4E0D;&#x540C;&#x7684;&#x662F;&#xFF0C;&#x70B9;&#x5B8C;&#x9910;&#x62FF;&#x5230;&#x53F7;&#x7801;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x5F80;&#x5F80;&#x4F1A;&#x5728;&#x4F4D;&#x7F6E;&#x4E0A;&#x7B49;&#x5F85;&#xFF0C;&#x800C;&#x5728;&#x6211;&#x4EEC;&#x540E;&#x9762;&#x7684;&#x8BF7;&#x6C42;&#x4F1A;&#x7EE7;&#x7EED;&#x5F97;&#x5230;&#x5904;&#x7406;&#xFF0C;&#x540C;&#x6837;&#x662F;&#x62FF;&#x4E86;&#x4E00;&#x4E2A;&#x53F7;&#x7801;&#x7136;&#x540E;&#x5230;&#x4E00;&#x65C1;&#x7B49;&#x5F85;&#xFF0C;&#x63A5;&#x5F85;&#x5458;&#x80FD;&#x4E00;&#x76F4;&#x8FDB;&#x884C;&#x5904;&#x7406;&#x3002;</p>
<p>&#x7B49;&#x5230;&#x996D;&#x83DC;&#x505A;&#x597D;&#x4E86;&#xFF0C;&#x4F1A;&#x558A;&#x53F7;&#x7801;&#xFF0C;&#x6211;&#x4EEC;&#x62FF;&#x5230;&#x4E86;&#x81EA;&#x5DF1;&#x7684;&#x996D;&#x83DC;&#xFF0C;&#x8FDB;&#x884C;&#x540E;&#x7EED;&#x7684;&#x5904;&#x7406;&#xFF08;&#x5403;&#x996D;&#xFF09;&#x3002;&#x8FD9;&#x4E2A;&#x558A;&#x53F7;&#x7801;&#x7684;&#x52A8;&#x4F5C;&#x5728;NodeJS&#x4E2D;&#x53EB;&#x505A;&#x56DE;&#x8C03;&#xFF08;Callback&#xFF09;&#xFF0C;&#x80FD;&#x5728;&#x4E8B;&#x4EF6;&#xFF08;&#x70E7;&#x83DC;&#xFF0C;I/O&#xFF09;&#x5904;&#x7406;&#x5B8C;&#x6210;&#x540E;&#x7EE7;&#x7EED;&#x6267;&#x884C;&#x540E;&#x9762;&#x7684;&#x903B;&#x8F91;&#xFF08;&#x5403;&#x996D;&#xFF09;&#xFF0C;&#x8FD9;&#x4F53;&#x73B0;&#x4E86;NodeJS&#x7684;&#x663E;&#x8457;&#x7279;&#x70B9;&#xFF1A;&#x5F02;&#x6B65;&#x673A;&#x5236;&#x3001;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6574;&#x4E2A;&#x8FC7;&#x7A0B;&#x6CA1;&#x6709;&#x963B;&#x585E;&#x65B0;&#x7528;&#x6237;&#x7684;&#x8FDE;&#x63A5;&#xFF08;&#x70B9;&#x9910;&#xFF09;&#xFF0C;&#x4E5F;&#x4E0D;&#x9700;&#x8981;&#x7EF4;&#x62A4;&#x5DF2;&#x7ECF;&#x70B9;&#x9910;&#x7684;&#x7528;&#x6237;&#x4E0E;&#x53A8;&#x5E08;&#x7684;&#x8FDE;&#x63A5;&#x3002;</p>
<p>&#x57FA;&#x4E8E;&#x8FD9;&#x6837;&#x7684;&#x673A;&#x5236;&#xFF0C;&#x7406;&#x8BBA;&#x4E0A;&#x9646;&#x7EED;&#x6709;&#x7528;&#x6237;&#x8BF7;&#x6C42;&#x8FDE;&#x63A5;&#xFF0C;NodeJS&#x90FD;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x54CD;&#x5E94;&#xFF0C;&#x56E0;&#x6B64;NodeJS&#x80FD;&#x652F;&#x6301;&#x6BD4;Java&#x3001;PHP&#x7A0B;&#x5E8F;&#x66F4;&#x9AD8;&#x7684;&#x5E76;&#x53D1;&#x91CF;&#x3002;</p>
<p>&#x867D;&#x7136;&#x7EF4;&#x62A4;&#x4E8B;&#x4EF6;&#x961F;&#x5217;&#x4E5F;&#x9700;&#x8981;&#x6210;&#x672C;&#xFF0C;&#x4F46;&#x7531;&#x4E8E;NodeJS&#x662F;&#x5355;&#x7EBF;&#x7A0B;&#xFF0C;&#x4E8B;&#x4EF6;&#x961F;&#x5217;&#x8D8A;&#x957F;&#xFF0C;&#x5F97;&#x5230;&#x54CD;&#x5E94;&#x7684;&#x65F6;&#x95F4;&#x5C31;&#x8D8A;&#x957F;&#xFF0C;&#x5E76;&#x53D1;&#x91CF;&#x4E0A;&#x53BB;&#x540E;&#x9762;&#x5BF9;CPU&#x5BC6;&#x96C6;&#x578B;&#x6A21;&#x578B;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x8FD8;&#x662F;&#x4F1A;&#x529B;&#x4E0D;&#x4ECE;&#x5FC3;&#xFF0C;&#x56E0;&#x6B64;&#x4F9D;&#x7136;&#x88AB;&#x90E8;&#x5206;&#x4EBA;&#x8BDF;&#x75C5;&#x3002;&#x4F46;&#x597D;&#x5728;&#xFF0C;&#x6D3B;&#x8DC3;&#x7684;&#x793E;&#x533A;&#x5728;&#x6301;&#x7EED;&#x7684;&#x89E3;&#x51B3;&#x5404;&#x79CD;&#x95EE;&#x9898;&#xFF0C;&#x5E94;&#x8FD0;&#x800C;&#x751F;&#x7684;<a href="https://github.com/xk/node-threads-a-gogo">threads-a-gogo&#xFF08;&#x4EE5;&#x4E0B;&#x7B80;&#x79F0;TAGG&#xFF09;</a>&#x8FD9;&#x4E2A;&#x6A21;&#x5757;&#x5C31;&#x662F;&#x8BA9;node&#x652F;&#x6301;&#x591A;&#x7EBF;&#x7A0B;&#x6A21;&#x578B;&#x3002;</p>
<blockquote>
<p>&#x603B;&#x7ED3;&#x4E00;&#x4E0B;NodeJS&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5E76;&#x53D1;&#x8FDE;&#x63A5;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x7684;&#xFF1A;&#x66F4;&#x6539;&#x8FDE;&#x63A5;&#x5230;&#x670D;&#x52A1;&#x5668;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x6BCF;&#x4E2A;&#x8FDE;&#x63A5;&#x53D1;&#x5C04;&#xFF08;emit&#xFF09;&#x4E00;&#x4E2A;&#x5728;NodeJS&#x5F15;&#x64CE;&#x8FDB;&#x7A0B;&#x4E2D;&#x8FD0;&#x884C;&#x7684;&#x4E8B;&#x4EF6;&#xFF08;Event&#xFF09;&#xFF0C;&#x653E;&#x8FDB;&#x4E8B;&#x4EF6;&#x961F;&#x5217;&#x5F53;&#x4E2D;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x4E3A;&#x6BCF;&#x4E2A;&#x8FDE;&#x63A5;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x65B0;&#x7684;OS&#x7EBF;&#x7A0B;&#xFF08;&#x5E76;&#x4E3A;&#x5176;&#x5206;&#x914D;&#x4E00;&#x4E9B;&#x914D;&#x5957;&#x5185;&#x5B58;&#xFF09;&#x3002;</p>
</blockquote>
<h4 id="t9&#x89E3;&#x51B3;I/O&#x963B;&#x585E;&#x7684;&#x95EE;&#x9898;">&#x89E3;&#x51B3;I/O&#x963B;&#x585E;&#x7684;&#x95EE;&#x9898; <a href="#t9&#x89E3;&#x51B3;I/O&#x963B;&#x585E;&#x7684;&#x95EE;&#x9898;"> # </a></h4>
<p>NodeJS&#x89E3;&#x51B3;&#x7684;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#x662F;I/O&#x963B;&#x585E;&#xFF0C;&#x770B;&#x770B;&#x8FD9;&#x6837;&#x7684;&#x4E1A;&#x52A1;&#x573A;&#x666F;&#xFF1A;&#x9700;&#x8981;&#x4ECE;&#x591A;&#x4E2A;&#x6570;&#x636E;&#x6E90;&#x62C9;&#x53D6;&#x6570;&#x636E;&#xFF0C;&#x7136;&#x540E;&#x8FDB;&#x884C;&#x5904;&#x7406;&#xFF0C;&#x5904;&#x7406;&#x7684;&#x65B9;&#x5F0F;&#x6709;&#xFF1A;</p>
<ol>
<li>&#x4E32;&#x884C;&#x83B7;&#x53D6;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x662F;&#x6211;&#x4EEC;&#x4E00;&#x822C;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;</li>
<li>NodeJS&#x975E;&#x963B;&#x585E;I/O&#xFF0C;&#x662F;&#x901A;&#x8FC7;&#x53D1;&#x5C04;/&#x76D1;&#x542C;&#x4E8B;&#x4EF6;&#x6765;&#x63A7;&#x5236;&#x6267;&#x884C;&#x8FC7;&#x7A0B;</li>
</ol>
<p>NodeJS&#x9047;&#x5230;I/O&#x4E8B;&#x4EF6;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x53BB;&#x6267;&#x884C;&#xFF0C;&#x7136;&#x540E;&#x4E3B;&#x7EBF;&#x7A0B;&#x4F1A;&#x7EE7;&#x7EED;&#x5F80;&#x4E0B;&#x6267;&#x884C;&#xFF0C;&#x4E8B;&#x4EF6;&#x4EE3;&#x7406;&#x63A5;&#x6536;&#x5230;&#x7EBF;&#x7A0B;&#x540E;&#x7EE7;&#x7EED;&#x5F80;&#x4E0B;&#x6267;&#x884C;&#x540E;&#x9762;&#x7684;&#x903B;&#x8F91;&#xFF0C;&#x8FD9;&#x5C31;&#x662F;NodeJS&#x975E;&#x963B;&#x585E;I/O&#x7684;&#x7279;&#x70B9;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x6765;&#x770B;&#x4EE5;&#x4E0B;&#x793A;&#x4F8B;&#xFF1A;</p>
<pre><code>/**
 * [require description]
 * @param  {[type]} &apos;events&apos; [description]
 * @return {[type]}          [description]
 */
var EventEmitter = require(&apos;events&apos;).EventEmitter;
var event = new EventEmitter();

event.on(&apos;eat&apos;, function() {
    console.log(&apos;&#x5F00;&#x996D;&#x5566;&apos;);
});

console.log(&apos;&#x6211;&#x8981;&#x5148;&#x53BB;&#x6563;&#x6B65;&apos;);

setTimeout(function() {
    event.emit(&apos;eat&apos;);
}, 1000);
</code></pre><h4 id="t10&#x7EFC;&#x5408;&#x5BF9;&#x6BD4;&#x5206;&#x6790;">&#x7EFC;&#x5408;&#x5BF9;&#x6BD4;&#x5206;&#x6790; <a href="#t10&#x7EFC;&#x5408;&#x5BF9;&#x6BD4;&#x5206;&#x6790;"> # </a></h4>
<ol>
<li>Nodejs&#x5177;&#x6709;&#x5904;&#x7406;&#x9AD8;&#x5E76;&#x53D1;&#x7684;&#x80FD;&#x529B;&#xFF08;&#x6700;&#x91CD;&#x8981;&#x7684;&#x4F18;&#x70B9;&#xFF09;</li>
<li>Nodejs&#x9002;&#x5408;I/O&#x5BC6;&#x96C6;&#x578B;&#x5E94;&#x7528;</li>
<li>Nodejs&#x4E0D;&#x9002;&#x5408;CPU&#x5BC6;&#x96C6;&#x578B;&#x5E94;&#x7528;&#xFF1B;CPU&#x5BC6;&#x96C6;&#x578B;&#x5E94;&#x7528;&#x7ED9;Node&#x5E26;&#x6765;&#x7684;&#x6311;&#x6218;&#x4E3B;&#x8981;&#x662F;&#xFF1A;&#x7531;&#x4E8E;JavaScript&#x5355;&#x7EBF;&#x7A0B;&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x957F;&#x65F6;&#x95F4;&#x8FD0;&#x884C;&#x7684;&#x8BA1;&#x7B97;&#xFF08;&#x6BD4;&#x5982;&#x5927;&#x5FAA;&#x73AF;&#xFF09;&#xFF0C;&#x5C06;&#x4F1A;&#x5BFC;&#x81F4;CPU&#x65F6;&#x95F4;&#x7247;&#x4E0D;&#x80FD;&#x91CA;&#x653E;&#xFF0C;&#x4F7F;&#x5F97;&#x540E;&#x7EED;I/O&#x65E0;&#x6CD5;&#x53D1;&#x8D77;&#xFF1B;</li>
</ol>
<p>&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF1A;&#x5206;&#x89E3;&#x5927;&#x578B;&#x8FD0;&#x7B97;&#x4EFB;&#x52A1;&#x4E3A;&#x591A;&#x4E2A;&#x5C0F;&#x4EFB;&#x52A1;&#xFF0C;&#x4F7F;&#x5F97;&#x8FD0;&#x7B97;&#x80FD;&#x591F;&#x9002;&#x65F6;&#x91CA;&#x653E;&#xFF0C;&#x4E0D;&#x963B;&#x585E;I/O&#x8C03;&#x7528;&#x7684;&#x53D1;&#x8D77;&#xFF1B;&#x6216;&#x8005;&#x4F7F;&#x7528;&#x7B2C;&#x4E09;&#x65B9;&#x6A21;&#x5757;&#xFF0C;&#x8BA9;Node&#x4E5F;&#x53EF;&#x4EE5;&#x521B;&#x5EFA;&#x591A;&#x8FDB;&#x7A0B;&#x3002;</p>
<p>&#x5F53;&#x7136;&#xFF0C;&#x4E5F;&#x6709;&#x5F88;&#x591A;&#x4EBA;&#x5410;&#x69FD;&#xFF1A;</p>
<ol>
<li><p>&#x53EA;&#x652F;&#x6301;&#x5355;&#x6838;CPU&#xFF0C;&#x4E0D;&#x80FD;&#x5145;&#x5206;&#x5229;&#x7528;CPU</p>
</li>
<li><p>&#x53EF;&#x9760;&#x6027;&#x4F4E;&#xFF0C;&#x4E00;&#x65E6;&#x4EE3;&#x7801;&#x67D0;&#x4E2A;&#x73AF;&#x8282;&#x5D29;&#x6E83;&#xFF0C;&#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x90FD;&#x5D29;&#x6E83;&#xFF0C;&#x539F;&#x56E0;&#x662F;nodejs&#x662F;&#x5355;&#x8FDB;&#x7A0B;&#x5355;&#x7EBF;&#x7A0B;</p>
</li>
</ol>
<p>But&#xFF0C;&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x90FD;&#x6709;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF1A;
&#xFF08;1&#xFF09;Nnigx&#x53CD;&#x5411;&#x4EE3;&#x7406;&#xFF0C;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF0C;&#x5F00;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF0C;&#x7ED1;&#x5B9A;&#x591A;&#x4E2A;&#x7AEF;&#x53E3;&#xFF1B;
&#xFF08;2&#xFF09;&#x5F00;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x76D1;&#x542C;&#x540C;&#x4E00;&#x4E2A;&#x7AEF;&#x53E3;&#xFF0C;&#x4F7F;&#x7528;cluster&#x6A21;&#x5757;&#xFF1B;</p>
<p>&#x6233;&#x8FD9;&#x91CC;&#x4E86;&#x89E3;<a href="http://taobaofed.org/blog/2015/11/03/nodejs-cluster/">&#x66F4;&#x591A;</a></p>
<blockquote>
<p>&#x603B;&#x800C;&#x8A00;&#x4E4B;&#xFF0C;NodeJS&#x9002;&#x5408;&#x8FD0;&#x7528;&#x5728;&#x9AD8;&#x5E76;&#x53D1;&#x3001;I/O&#x5BC6;&#x96C6;&#x3001;&#x5C11;&#x91CF;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x7684;&#x573A;&#x666F;&#x3002;</p>
</blockquote>
<h1 id="t11Chapter 2 -- Node.js&#x57FA;&#x7840;&#x77E5;&#x8BC6;">Chapter 2 -- Node.js&#x57FA;&#x7840;&#x77E5;&#x8BC6; <a href="#t11Chapter 2 -- Node.js&#x57FA;&#x7840;&#x77E5;&#x8BC6;"> # </a></h1>
<blockquote>
<p>&#x5BFC;&#x8BFB;&#xFF1A;&#x5728;&#x8FD9;&#x4E00;&#x90E8;&#x5206;&#x7684;&#x57FA;&#x7840;&#x5185;&#x5BB9;&#x4E2D;&#xFF0C;&#x5C06;&#x4F1A;&#x5B66;&#x4E60;&#x5982;&#x4F55;&#x5B89;&#x88C5;&#x5E76;&#x4F53;&#x9A8C;Nodejs&#xFF0C;&#x4E86;&#x89E3;Nodejs&#x91CC;&#x9762;&#x7684;&#x6A21;&#x5757;&#x4EE5;&#x53CA;&#x76F8;&#x5173;&#x7684;&#x4EE3;&#x7801;&#x89C4;&#x8303;&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x5B66;&#x4E60;npm&#x5305;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x4F7F;&#x7528;&#x3002;</p>
</blockquote>
<h2 id="t12&#x5B89;&#x88C5;">&#x5B89;&#x88C5; <a href="#t12&#x5B89;&#x88C5;"> # </a></h2>
<h3 id="t13windows&#x4E0A;&#x5B89;&#x88C5;">windows&#x4E0A;&#x5B89;&#x88C5; <a href="#t13windows&#x4E0A;&#x5B89;&#x88C5;"> # </a></h3>
<ul>
<li>&#x5148;&#x53BB;&#x4E0B;&#x8F7D;&#x4E00;&#x4E0B;<a href="http://git-scm.com/download/">git</a>&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x53EF;&#x4EE5;&#x8FD0;&#x884C;git bash&#xFF0C;&#x65B9;&#x4FBF;&#x4F7F;&#x7528;shell&#x547D;&#x4EE4;</li>
</ul>
<p><code>step1.</code> &#x8FDB;&#x5165;<a href="https://nodejs.org/">nodejs.org</a>&#x4E0B;&#x8F7D;</p>
<p><code>step2.</code> &#x4E0B;&#x8F7D;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x53CC;&#x51FB;&#x9ED8;&#x8BA4;&#x5B89;&#x88C5;&#x3002;&#x5B89;&#x88C5;&#x7A0B;&#x5E8F;&#x4F1A;&#x81EA;&#x52A8;&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;</p>
<p><code>step3.</code> &#x68C0;&#x6D4B;nodejs&#x662F;&#x5426;&#x5B89;&#x88C5;&#x6210;&#x529F;&#x3002;&#x6253;&#x5F00;cmd&#x547D;&#x4EE4;&#x884C; &#x8F93;&#x5165; :</p>
<pre><code>node - v
</code></pre><p><code>step4.</code> &#x68C0;&#x67E5;npm&#x662F;&#x5426;&#x5B89;&#x88C5;&#x3002;&#x7531;&#x4E8E;&#x65B0;&#x7248;&#x7684;NodeJS&#x5DF2;&#x7ECF;&#x96C6;&#x6210;&#x4E86;npm&#xFF0C;&#x6240;&#x4EE5;&#x4E4B;&#x524D;npm&#x4E5F;&#x4E00;&#x5E76;&#x5B89;&#x88C5;&#x597D;&#x4E86;&#x3002;&#x540C;&#x6837;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;cmd&#x547D;&#x4EE4;&#x884C;&#x8FDB;&#x884C;&#x786E;&#x8BA4;&#x3002;</p>
<pre><code>npm -v
</code></pre><h3 id="t14mac&#x4E0A;&#x5B89;&#x88C5;">mac&#x4E0A;&#x5B89;&#x88C5; <a href="#t14mac&#x4E0A;&#x5B89;&#x88C5;"> # </a></h3>
<ul>
<li>&#x5347;&#x7EA7;&#x7CFB;&#x7EDF;</li>
<li>&#x5347;&#x7EA7;xcode<pre><code>xcode-select -p
xcode-select --install
</code></pre></li>
<li>&#x5B89;&#x88C5;Homebrew
&#x524D;&#x63D0;&#x662F;python&#x548C;ruby&#x5B89;&#x88C5;&#x597D;
&#x5B98;&#x7F51;&#x67E5;&#x770B;&#x65B9;&#x6CD5;</li>
<li>&#x5B89;&#x88C5;<pre><code>brew install node
</code></pre></li>
<li>&#x68C0;&#x67E5;<pre><code>node -v
</code></pre></li>
</ul>
<h3 id="t15linux&#x4E0A;&#x5B89;&#x88C5;">linux&#x4E0A;&#x5B89;&#x88C5; <a href="#t15linux&#x4E0A;&#x5B89;&#x88C5;"> # </a></h3>
<ul>
<li>&#x5148;&#x8981;&#x626B;&#x5E73;&#x73AF;&#x5883;&#x95EE;&#x9898;
&#x4E5F;&#x53EF;&#x4EE5;&#x5230;&#x5B98;&#x7F51;&#x67E5;&#x770B;
&#x8981;&#x6C42;gcc 4.2+&#x548C;g++ 4.2+&#x4EE5;&#x53CA;python 2.6&#x548C;gnu&#x7684;&#x7248;&#x672C;&#x8981;&#x6C42;</li>
<li>&#x68C0;&#x67E5;<pre><code>cat /etc/redhat-release
rpm -q gcc rpm -q gcc-c++
yum -y install gcc gcc-c++ kernel-devel
</code></pre>ubuntu&#x4E0B;&#x53EF;&#x4EE5;apt-get<pre><code>cd /usr/src
wget &#x94FE;&#x63A5;
tar -xf node&#x5305;&#x540D;
cd node&#x5305;
./config
make
sudo make install
</code></pre></li>
<li>&#x68C0;&#x67E5;&#x5B89;&#x88C5;&#x662F;&#x5426;&#x6210;&#x529F;<pre><code>node -v
npm -v
</code></pre><h3 id="t16&#x7248;&#x672C;&#x8BF4;&#x660E;">&#x7248;&#x672C;&#x8BF4;&#x660E; <a href="#t16&#x7248;&#x672C;&#x8BF4;&#x660E;"> # </a></h3>
</li>
</ul>
<blockquote>
<p>&#x76EE;&#x524D;&#x6700;&#x65B0;&#x7684;&#x90FD;&#x5DF2;&#x7ECF;&#x5230;<code>5.1.0</code>&#xFF0C;&#x8FD9;&#x662F;&#x4ECE;0.12&#x7248;&#x672C;&#x540E;&#xFF0C;nodejs&#x548C;iojs(&#x7531;&#x4E8E;&#x90E8;&#x5206;&#x5F00;&#x53D1;&#x8005;&#x5BF9;&#x7BA1;&#x7406;&#x6A21;&#x5F0F;&#x7684;&#x4E0D;&#x6EE1;&#xFF0C;&#x4FBF;fork&#x4E86;nodejs&#x540E;&#x521B;&#x5EFA;&#x4E86;io.js&#xFF0C;&#x91C7;&#x7528;&#x72EC;&#x7ACB;&#x7684;&#x793E;&#x533A;&#x9A71;&#x52A8;&#x6A21;&#x5F0F;&#x8FD0;&#x8425;&#x8FD9;&#x4E2A;&#x5F00;&#x6E90;&#x9879;&#x76EE;&#xFF0C;&#x6BCF;&#x5468;&#x4E00;&#x4E2A;&#x7248;&#x672C;&#x8FED;&#x4EE3;)&#x5408;&#x5E76;&#x4E86;&#xFF0C;&#x76F4;&#x63A5;&#x4ECE;4.0&#x7248;&#x672C;&#x5F00;&#x59CB;&#x53D1;&#x5C55;&#x4E86;&#xFF0C;&#x5230;&#x5982;&#x4ECA;&#x5DF2;&#x7ECF;&#x662F;5.1&#x7248;&#x672C;&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x8FD8;&#x5728;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#x8FED;&#x4EE3;&#x4E2D;&#x3002;</p>
</blockquote>
<p><strong>&#x5173;&#x4E8E;nodejs&#x7248;&#x672C;&#x53F7;&#x7684;&#x8BF4;&#x660E;</strong></p>
<p>&#x5076;&#x6570;&#x4F4D;&#x7684;&#x7248;&#x672C;&#x662F;&#x7A33;&#x5B9A;&#x7248;&#x672C;&#xFF0C;&#x800C;&#x4E00;&#x822C;&#x5947;&#x6570;&#x4F4D;&#x7684;&#x5C31;&#x662F;&#x975E;&#x7A33;&#x5B9A;&#x7248;&#x672C;&#xFF0C;&#x8FD9;&#x51E0;&#x4E4E;&#x662F;&#x5728;&#x4E1A;&#x754C;&#x5927;&#x5BB6;&#x90FD;&#x8FBE;&#x6210;&#x5171;&#x8BC6;&#x4E86;&#x3002;&#x6BD4;&#x5982;0.6.x&#x5C31;&#x662F;&#x7A33;&#x5B9A;&#x7248;&#x672C;&#xFF0C;&#x800C;0.11.x&#x5C31;&#x662F;&#x65B0;&#x529F;&#x80FD;&#x6D4B;&#x8BD5;&#x7684;&#x975E;&#x7A33;&#x5B9A;&#x7248;&#x672C;</p>
<p>&#x5EFA;&#x8BAE;&#x9009;&#x62E9;&#x6700;&#x65B0;&#x7684;&#x7A33;&#x5B9A;&#x7248;&#x672C;&#x8FDB;&#x884C;&#x4F7F;&#x7528;&#x3002;&#x7531;&#x4E8E;&#x7248;&#x672C;&#x8F83;&#x591A;&#xFF0C;&#x4E3A;&#x4E86;&#x65B9;&#x4FBF;node&#x7248;&#x672C;&#x7BA1;&#x7406;&#xFF0C;&#x63A8;&#x8350;&#x51E0;&#x4E2A;&#x5DE5;&#x5177;&#xFF1A;</p>
<ul>
<li>osx, linux&#x7CFB;&#x7EDF;&#x4E0B;</li>
</ul>
<p>&#x63A8;&#x8350;&#x4F7F;&#x7528;n&#x548C;nvm&#x8FDB;&#x884C;node&#x7684;&#x591A;&#x7248;&#x672C;&#x7BA1;&#x7406;&#xFF0C;n&#x662F;node&#x7684;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#xFF0C;TJ&#x5927;&#x795E;&#x5F00;&#x53D1;&#x7684;&#x3002;</p>
<pre><code>npm install -g n
n 5.0.0
</code></pre><ul>
<li>windows&#x7CFB;&#x7EDF;&#x4E0B;</li>
</ul>
<p>&#x63A8;&#x8350;&#x4F7F;&#x7528;nvmw&#x8FDB;&#x884C;node&#x7684;&#x591A;&#x7248;&#x672C;&#x7BA1;&#x7406;&#x3002;</p>
<pre><code>// &#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x76EE;&#x5F55;&#x4E0B;&#x8F7D;nvmw&#xFF0C;&#x6BD4;&#x5982;&#x653E;&#x5728;C:\Program Files\nvmw
git clone https://github.com/hakobera/nvmw.git
// &#x914D;&#x7F6E;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#xFF0C;&#x5728;path&#x4E2D;&#x589E;&#x52A0;C:\Program Files\nvmw
// &#x8FD0;&#x884C;nvmw&#x547D;&#x4EE4;
nvmw ls
nvmw use v5.0.0
nvmw install v5.0.0
</code></pre><p>&#x4E0D;&#x8FC7;&#xFF0C;&#x8FD9;&#x4E2A;&#x6BD4;&#x8F83;&#x5751;&#xFF0C;git bash&#x4E0B;&#x65E0;&#x6CD5;&#x8FD0;&#x884C;&#xFF0C;&#x800C;&#x4E14;&#xFF0C;&#x5BF9;&#x65B0;&#x7248;node&#x8FD8;&#x4E0D;&#x652F;&#x6301;</p>
<h2 id="t17node&#x521D;&#x4F53;&#x9A8C;">node&#x521D;&#x4F53;&#x9A8C; <a href="#t17node&#x521D;&#x4F53;&#x9A8C;"> # </a></h2>
<h3 id="t18nodejs&#x7684;REPL&#x4EA4;&#x4E92;&#x73AF;&#x5883;">nodejs&#x7684;REPL&#x4EA4;&#x4E92;&#x73AF;&#x5883; <a href="#t18nodejs&#x7684;REPL&#x4EA4;&#x4E92;&#x73AF;&#x5883;"> # </a></h3>
<p>&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x63A7;&#x5236;&#x53F0;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x7F16;&#x5199;js&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x8FD0;&#x884C;</p>
<p>&#x5728;&#x4F60;&#x7684;CMD&#x7A97;&#x53E3;&#xFF0C;&#x952E;&#x5165;node&#x540E;&#x56DE;&#x8F66;&#xFF0C;&#x5373;&#x53EF;&#x8FDB;&#x5165;node&#x7684;repl&#x73AF;&#x5883;&#x8FD0;&#x884C;js&#x4EE3;&#x7801;&#x3002;</p>
<p><a href="http://segmentfault.com/a/1190000002673137">&#x66F4;&#x591A;&#x5173;&#x4E8E;REPL&#x7684;&#x7B80;&#x5355;&#x8BF4;&#x660E;&#x6233;&#x8FD9;&#x91CC;</a></p>
<h3 id="t19&#x5199;&#x4E2A;&#x811A;&#x672C;">&#x5199;&#x4E2A;&#x811A;&#x672C; <a href="#t19&#x5199;&#x4E2A;&#x811A;&#x672C;"> # </a></h3>
<p>&#x4EE3;&#x7801;&#x53C2;&#x89C1;<a href="https://github.com/iUAP-FE/nodejs">git&#x4ED3;&#x5E93;</a>&#x3002;</p>
<h3 id="t20&#x8D77;&#x4E2A;web&#x670D;&#x52A1;">&#x8D77;&#x4E2A;web&#x670D;&#x52A1; <a href="#t20&#x8D77;&#x4E2A;web&#x670D;&#x52A1;"> # </a></h3>
<pre><code>//http.js

var http = require(&apos;http&apos;);

var app = http.createServer(function(req, res){
  res.writeHead(200, {&quot;Content-Type&quot;: &quot;text/plain&quot;});
  res.end(&quot;Hello world&quot;);
});

app.listen(1337);
</code></pre><p>&#x662F;&#x7684;&#xFF0C;&#x5C31;&#x662F;&#x8FD9;&#x6837;&#x795E;&#x5947;&#xFF0C;&#x77ED;&#x77ED;&#x51E0;&#x884C;&#x4EE3;&#x7801;&#xFF0C;&#x5C31;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;web&#x670D;&#x52A1;&#xFF0C;&#x800C;&#x4E14;&#xFF0C;&#x8BF7;&#x4E0D;&#x8981;&#x8F7B;&#x89C6;&#x5B83;&#xFF0C;&#x8FD9;&#x8FD8;&#x662F;&#x4E00;&#x4E2A;&#x9AD8;&#x6027;&#x80FD;&#x7684;web&#x670D;&#x52A1;&#x5668;&#x3002;</p>
<h2 id="t21Nodejs&#x6A21;&#x5757;&#x6982;&#x8FF0;">Nodejs&#x6A21;&#x5757;&#x6982;&#x8FF0; <a href="#t21Nodejs&#x6A21;&#x5757;&#x6982;&#x8FF0;"> # </a></h2>
<blockquote>
<p>nodejs&#x7684;&#x6A21;&#x5757;&#x5206;&#x4E3A;&#x63D0;&#x4F9B;&#x7684;&#x6838;&#x5FC3;&#x6A21;&#x5757;&#x4EE5;&#x53CA;&#x6211;&#x4EEC;&#x7F16;&#x5199;&#x7684;&#x4E1A;&#x52A1;&#x6A21;&#x5757;</p>
</blockquote>
<h3 id="t22&#x52A0;&#x8F7D;&#x6A21;&#x5757;">&#x52A0;&#x8F7D;&#x6A21;&#x5757; <a href="#t22&#x52A0;&#x8F7D;&#x6A21;&#x5757;"> # </a></h3>
<p>Node.js&#x91C7;&#x7528;&#x6A21;&#x5757;&#x5316;&#x7ED3;&#x6784;&#xFF0C;&#x6309;&#x7167;CommonJS&#x89C4;&#x8303;&#x5B9A;&#x4E49;&#x548C;&#x4F7F;&#x7528;&#x6A21;&#x5757;&#x3002;&#x6A21;&#x5757;&#x4E0E;&#x6587;&#x4EF6;&#x662F;&#x4E00;&#x4E00;&#x5BF9;&#x5E94;&#x5173;&#x7CFB;&#xFF0C;&#x5373;&#x52A0;&#x8F7D;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x5C31;&#x662F;&#x52A0;&#x8F7D;&#x5BF9;&#x5E94;&#x7684;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x3002;</p>
<p>require&#x65B9;&#x6CD5;&#x7684;&#x53C2;&#x6570;&#x662F;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x7684;&#x540D;&#x5B57;&#x3002;&#x5B83;&#x5206;&#x6210;&#x4E24;&#x79CD;&#x60C5;&#x51B5;&#x3002;</p>
<p>&#x7B2C;&#x4E00;&#x79CD;&#x60C5;&#x51B5;&#x662F;&#x53C2;&#x6570;&#x4E2D;&#x542B;&#x6709;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;&#xFF0C;&#x8FD9;&#x65F6;&#x8DEF;&#x5F84;&#x662F;&#x76F8;&#x5BF9;&#x4E8E;&#x5F53;&#x524D;&#x811A;&#x672C;&#x6240;&#x5728;&#x7684;&#x76EE;&#x5F55;&#xFF1A;</p>
<pre><code>var myfile = require(&apos;./myfile.js&apos;);
</code></pre><p>&#x7B2C;&#x4E8C;&#x79CD;&#x60C5;&#x51B5;&#x662F;&#x53C2;&#x6570;&#x4E2D;&#x4E0D;&#x542B;&#x6709;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;&#xFF0C;&#x8FD9;&#x65F6;Node&#x5230;&#x6A21;&#x5757;&#x7684;&#x5B89;&#x88C5;&#x76EE;&#x5F55;&#xFF0C;&#x53BB;&#x5BFB;&#x627E;&#x5DF2;&#x5B89;&#x88C5;&#x7684;&#x6A21;&#x5757;&#xFF08;&#x6BD4;&#x5982;&#x4E0B;&#x4F8B;&#xFF09;&#x3002;</p>
<pre><code>var gulp = require(&apos;gulp&apos;);
</code></pre><h3 id="t23&#x6838;&#x5FC3;&#x6A21;&#x5757;">&#x6838;&#x5FC3;&#x6A21;&#x5757; <a href="#t23&#x6838;&#x5FC3;&#x6A21;&#x5757;"> # </a></h3>
<p>&#x5982;&#x679C;&#x53EA;&#x662F;&#x5728;&#x670D;&#x52A1;&#x5668;&#x8FD0;&#x884C;JavaScript&#x4EE3;&#x7801;&#xFF0C;&#x7528;&#x5904;&#x5E76;&#x4E0D;&#x5927;&#xFF0C;&#x56E0;&#x4E3A;&#x670D;&#x52A1;&#x5668;&#x811A;&#x672C;&#x8BED;&#x8A00;&#x5DF2;&#x7ECF;&#x6709;&#x5F88;&#x591A;&#x79CD;&#x4E86;&#x3002;Node.js&#x7684;&#x7528;&#x5904;&#x5728;&#x4E8E;&#xFF0C;&#x5B83;&#x672C;&#x8EAB;&#x8FD8;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x7CFB;&#x5217;&#x529F;&#x80FD;&#x6A21;&#x5757;&#xFF0C;&#x4E0E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E92;&#x52A8;&#x3002;&#x8FD9;&#x4E9B;&#x6838;&#x5FC3;&#x7684;&#x529F;&#x80FD;&#x6A21;&#x5757;&#xFF0C;&#x4E0D;&#x7528;&#x5B89;&#x88C5;&#x5C31;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#xFF0C;&#x4E0B;&#x9762;&#x662F;&#x5B83;&#x4EEC;&#x7684;&#x6E05;&#x5355;&#x3002;</p>
<pre><code>http&#xFF1A;&#x63D0;&#x4F9B;HTTP&#x670D;&#x52A1;&#x5668;&#x529F;&#x80FD;&#x3002;
url&#xFF1A;&#x89E3;&#x6790;URL&#x3002;
fs&#xFF1A;&#x4E0E;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4EA4;&#x4E92;&#x3002;
querystring&#xFF1A;&#x89E3;&#x6790;URL&#x7684;&#x67E5;&#x8BE2;&#x5B57;&#x7B26;&#x4E32;&#x3002;
child_process&#xFF1A;&#x65B0;&#x5EFA;&#x5B50;&#x8FDB;&#x7A0B;&#x3002;
util&#xFF1A;&#x63D0;&#x4F9B;&#x4E00;&#x7CFB;&#x5217;&#x5B9E;&#x7528;&#x5C0F;&#x5DE5;&#x5177;&#x3002;
path&#xFF1A;&#x5904;&#x7406;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;&#x3002;
crypto&#xFF1A;&#x63D0;&#x4F9B;&#x52A0;&#x5BC6;&#x548C;&#x89E3;&#x5BC6;&#x529F;&#x80FD;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x662F;&#x5BF9;OpenSSL&#x7684;&#x5305;&#x88C5;&#x3002;
</code></pre><p>&#x4E0A;&#x9762;&#x8FD9;&#x4E9B;&#x6838;&#x5FC3;&#x6A21;&#x5757;&#xFF0C;&#x6E90;&#x7801;&#x90FD;&#x5728;Node&#x7684;lib&#x5B50;&#x76EE;&#x5F55;&#x4E2D;&#x3002;&#x4E3A;&#x4E86;&#x63D0;&#x9AD8;&#x8FD0;&#x884C;&#x901F;&#x5EA6;&#xFF0C;&#x5B83;&#x4EEC;&#x5B89;&#x88C5;&#x65F6;&#x90FD;&#x4F1A;&#x88AB;&#x7F16;&#x8BD1;&#x6210;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x3002;</p>
<p>&#x6838;&#x5FC3;&#x6A21;&#x5757;&#x603B;&#x662F;&#x6700;&#x4F18;&#x5148;&#x52A0;&#x8F7D;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F60;&#x81EA;&#x5DF1;&#x5199;&#x4E86;&#x4E00;&#x4E2A;HTTP&#x6A21;&#x5757;&#xFF0C;<code>require(&apos;http&apos;)</code>&#x52A0;&#x8F7D;&#x7684;&#x8FD8;&#x662F;&#x6838;&#x5FC3;&#x6A21;&#x5757;&#x3002;</p>
<h3 id="t24&#x81EA;&#x5B9A;&#x4E49;&#x6A21;&#x5757;">&#x81EA;&#x5B9A;&#x4E49;&#x6A21;&#x5757; <a href="#t24&#x81EA;&#x5B9A;&#x4E49;&#x6A21;&#x5757;"> # </a></h3>
<p>Node&#x6A21;&#x5757;&#x91C7;&#x7528;CommonJS&#x89C4;&#x8303;&#x3002;&#x53EA;&#x8981;&#x7B26;&#x5408;&#x8FD9;&#x4E2A;&#x89C4;&#x8303;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x81EA;&#x5B9A;&#x4E49;&#x6A21;&#x5757;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x662F;&#x4E00;&#x4E2A;&#x6700;&#x7B80;&#x5355;&#x7684;&#x6A21;&#x5757;&#xFF0C;&#x5047;&#x5B9A;&#x65B0;&#x5EFA;&#x4E00;&#x4E2A;test.js&#x6587;&#x4EF6;&#xFF0C;&#x5199;&#x5165;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;&#x3002;</p>
<pre><code>module.exports = function(str) {
    alert(str);
};
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#xFF0C;&#x5B83;&#x901A;&#x8FC7;module.exports&#x53D8;&#x91CF;&#xFF0C;&#x5BF9;&#x5916;&#x8F93;&#x51FA;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x3002;</p>
<p>&#x8FD9;&#x4E2A;&#x6A21;&#x5757;&#x7684;&#x4F7F;&#x7528;&#x65B9;&#x6CD5;&#x5982;&#x4E0B;&#x3002;</p>
<pre><code>var test = require(&apos;./test&apos;);

test(&quot;hello world&quot;);
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x901A;&#x8FC7;require&#x547D;&#x4EE4;&#x52A0;&#x8F7D;&#x6A21;&#x5757;&#x6587;&#x4EF6;test.js&#xFF08;&#x540E;&#x7F00;&#x540D;&#x7701;&#x7565;&#xFF09;&#x3002;</p>
<h2 id="t25commonjs&#x4EE3;&#x7801;&#x89C4;&#x8303;&#x8BF4;&#x660E;">commonjs&#x4EE3;&#x7801;&#x89C4;&#x8303;&#x8BF4;&#x660E; <a href="#t25commonjs&#x4EE3;&#x7801;&#x89C4;&#x8303;&#x8BF4;&#x660E;"> # </a></h2>
<p>&#x4E5F;&#x8BB8;&#x4F60;&#x5BF9;&#x4E0A;&#x9762;&#x7684;&#x4EE3;&#x7801;&#x6709;&#x6240;&#x597D;&#x5947;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x5C31;&#x6765;&#x7B80;&#x5355;&#x5206;&#x6790;&#x4E0B;&#x4EE5;&#x4E0A;&#x4EE3;&#x7801;&#x3002;</p>
<p>&#x9996;&#x5148;&#xFF0C;Node&#x7A0B;&#x5E8F;&#x5B83;&#x662F;&#x7531;&#x8BB8;&#x591A;&#x4E2A;&#x6A21;&#x5757;&#x7EC4;&#x6210;&#x7684;&#xFF0C;&#x6BCF;&#x4E2A;&#x6A21;&#x5757;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x3002;Node&#x6A21;&#x5757;&#x91C7;&#x7528;&#x4E86;CommonJS&#x89C4;&#x8303;&#x3002;</p>
<p>&#x6839;&#x636E;CommonJS&#x89C4;&#x8303;&#xFF0C;&#x4E00;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x6587;&#x4EF6;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#x3002;&#x6BCF;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#x90FD;&#x662F;&#x4E00;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x4F5C;&#x7528;&#x57DF;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x5728;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5B9A;&#x4E49;&#x7684;&#x53D8;&#x91CF;&#xFF08;&#x8FD8;&#x5305;&#x62EC;&#x51FD;&#x6570;&#x548C;&#x7C7B;&#xFF09;&#xFF0C;&#x90FD;&#x662F;&#x79C1;&#x6709;&#x7684;&#xFF0C;&#x5BF9;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x662F;&#x4E0D;&#x53EF;&#x89C1;&#x7684;&#x3002;</p>
<p>&#x800C;&#x4E14;&#xFF0C;CommonJS&#x89C4;&#x5B9A;&#xFF0C;&#x6BCF;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x5BF9;&#x5916;&#x63A5;&#x53E3;&#x662F;module.exports&#x5BF9;&#x8C61;&#x3002;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x6240;&#x6709;&#x5C5E;&#x6027;&#x548C;&#x65B9;&#x6CD5;&#xFF0C;&#x90FD;&#x53EF;&#x4EE5;&#x88AB;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x5BFC;&#x5165;&#x3002;</p>
<p>&#x5982;&#x4E0B;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x6A21;&#x5757;</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">var</span> x = <span class="hljs-number">5</span>;

<span class="hljs-keyword">var</span> addX = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">value</span>) </span>{
  <span class="hljs-keyword">return</span> value + x;
};

<span class="hljs-comment">// &#x5BFC;&#x51FA;&#x53D8;&#x91CF;&#x548C;&#x65B9;&#x6CD5;</span>
<span class="hljs-built_in">module</span>.exports.x = x;
<span class="hljs-built_in">module</span>.exports.addX = addX;
</code></pre>
<p>&#x7406;&#x89E3;&#xFF1A;&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x901A;&#x8FC7;module.exports&#x5BF9;&#x8C61;&#xFF0C;&#x5B9A;&#x4E49;&#x5BF9;&#x5916;&#x63A5;&#x53E3;&#xFF0C;&#x8F93;&#x51FA;&#x53D8;&#x91CF;x&#x548C;&#x51FD;&#x6570;addX&#x3002;module.exports&#x5BF9;&#x8C61;&#x662F;&#x53EF;&#x4EE5;&#x88AB;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x5BFC;&#x5165;&#x7684;&#xFF0C;&#x5B83;&#x5176;&#x5B9E;&#x5C31;&#x662F;&#x6587;&#x4EF6;&#x5185;&#x90E8;&#x4E0E;&#x5916;&#x90E8;&#x901A;&#x4FE1;&#x7684;&#x6865;&#x6881;&#x3002;</p>
<p>&#x597D;&#xFF0C;&#x7EE7;&#x7EED;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x5F15;&#x7528;&#x521A;&#x624D;&#x5B9A;&#x4E49;&#x7684;&#x6A21;&#x5757;</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">var</span> example = <span class="hljs-built_in">require</span>(<span class="hljs-string">&apos;./example.js&apos;</span>);

<span class="hljs-built_in">console</span>.log(example.x); <span class="hljs-comment">// 5</span>
<span class="hljs-built_in">console</span>.log(addX(<span class="hljs-number">1</span>)); <span class="hljs-comment">// 6</span>
</code></pre>
<h3 id="t26module&#x5BF9;&#x8C61;">module&#x5BF9;&#x8C61; <a href="#t26module&#x5BF9;&#x8C61;"> # </a></h3>
<p>&#x6BCF;&#x4E2A;&#x6A21;&#x5757;&#x5185;&#x90E8;&#xFF0C;&#x90FD;&#x6709;&#x4E00;&#x4E2A;module&#x5BF9;&#x8C61;&#xFF0C;&#x4EE3;&#x8868;&#x5F53;&#x524D;&#x6A21;&#x5757;&#x3002;&#x5B83;&#x6709;&#x4EE5;&#x4E0B;&#x5C5E;&#x6027;&#x3002;</p>
<pre><code>module.id &#x6A21;&#x5757;&#x7684;&#x8BC6;&#x522B;&#x7B26;&#xFF0C;&#x901A;&#x5E38;&#x662F;&#x5E26;&#x6709;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#x7684;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x540D;&#x3002;
module.filename &#x6A21;&#x5757;&#x7684;&#x6587;&#x4EF6;&#x540D;&#xFF0C;&#x5E26;&#x6709;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#x3002;
module.loaded &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5E03;&#x5C14;&#x503C;&#xFF0C;&#x8868;&#x793A;&#x6A21;&#x5757;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x5B8C;&#x6210;&#x52A0;&#x8F7D;&#x3002;
module.parent &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x8868;&#x793A;&#x8C03;&#x7528;&#x8BE5;&#x6A21;&#x5757;&#x7684;&#x6A21;&#x5757;&#x3002;
module.children &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#xFF0C;&#x8868;&#x793A;&#x8BE5;&#x6A21;&#x5757;&#x8981;&#x7528;&#x5230;&#x7684;&#x5176;&#x4ED6;&#x6A21;&#x5757;&#x3002;
</code></pre><ul>
<li><p>module.exports&#x5C5E;&#x6027;
module.exports&#x5C5E;&#x6027;&#x8868;&#x793A;&#x5F53;&#x524D;&#x6A21;&#x5757;&#x5BF9;&#x5916;&#x8F93;&#x51FA;&#x7684;&#x63A5;&#x53E3;&#xFF0C;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x52A0;&#x8F7D;&#x8BE5;&#x6A21;&#x5757;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x5C31;&#x662F;&#x8BFB;&#x53D6;module.exports&#x53D8;&#x91CF;&#x3002;</p>
</li>
<li><p>exports&#x53D8;&#x91CF;
&#x4E3A;&#x4E86;&#x65B9;&#x4FBF;&#xFF0C;Node&#x4E3A;&#x6BCF;&#x4E2A;&#x6A21;&#x5757;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;exports&#x53D8;&#x91CF;&#xFF0C;&#x6307;&#x5411;module.exports&#x3002;&#x8FD9;&#x7B49;&#x540C;&#x5728;&#x6BCF;&#x4E2A;&#x6A21;&#x5757;&#x5934;&#x90E8;&#xFF0C;&#x6709;&#x4E00;&#x884C;&#x8FD9;&#x6837;&#x7684;&#x547D;&#x4EE4;&#x3002;</p>
<h3 id="t27require&#x547D;&#x4EE4;&#x7684;&#x89E3;&#x8BFB;">require&#x547D;&#x4EE4;&#x7684;&#x89E3;&#x8BFB; <a href="#t27require&#x547D;&#x4EE4;&#x7684;&#x89E3;&#x8BFB;"> # </a></h3>
<p>Node.js&#x4F7F;&#x7528;CommonJS&#x6A21;&#x5757;&#x89C4;&#x8303;&#xFF0C;&#x5185;&#x7F6E;&#x7684;require&#x547D;&#x4EE4;&#x7528;&#x4E8E;&#x52A0;&#x8F7D;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x3002;</p>
</li>
</ul>
<p>require&#x547D;&#x4EE4;&#x7684;&#x57FA;&#x672C;&#x529F;&#x80FD;&#x662F;&#xFF0C;&#x8BFB;&#x5165;&#x5E76;&#x6267;&#x884C;&#x4E00;&#x4E2A;JavaScript&#x6587;&#x4EF6;&#xFF0C;&#x7136;&#x540E;&#x8FD4;&#x56DE;&#x8BE5;&#x6A21;&#x5757;&#x7684;exports&#x5BF9;&#x8C61;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x53D1;&#x73B0;&#x6307;&#x5B9A;&#x6A21;&#x5757;&#xFF0C;&#x4F1A;&#x62A5;&#x9519;&#x3002;</p>
<pre><code>// example.js
var invisible = function () {
  console.log(&quot;invisible&quot;);
}

exports.message = &quot;hi&quot;;

exports.say = function () {
  console.log(message);
}
</code></pre><h3 id="t28require&#x52A0;&#x8F7D;&#x6A21;&#x5757;&#x7684;&#x89C4;&#x5219;">require&#x52A0;&#x8F7D;&#x6A21;&#x5757;&#x7684;&#x89C4;&#x5219; <a href="#t28require&#x52A0;&#x8F7D;&#x6A21;&#x5757;&#x7684;&#x89C4;&#x5219;"> # </a></h3>
<p>require&#x547D;&#x4EE4;&#x7528;&#x4E8E;&#x52A0;&#x8F7D;&#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x4EE5;&#x52A0;&#x8F7D;&#x540E;&#x7F00;&#x540D;&#x4E3A;<code>.js</code> <code>.json</code> <code>.node</code>&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x6BD4;&#x5982;&#xFF1A;</p>
<pre><code>var foo = require(&apos;foo&apos;);
//  &#x7B49;&#x540C;&#x4E8E;
var foo = require(&apos;foo.js&apos;);
</code></pre><p>&#x4E3E;&#x4F8B;&#x6765;&#x8BF4;&#xFF0C;&#x811A;&#x672C;/home/user/projects/foo.js&#x6267;&#x884C;&#x4E86;require(&apos;bar.js&apos;)&#x547D;&#x4EE4;&#xFF0C;Node&#x4F1A;&#x4F9D;&#x6B21;&#x641C;&#x7D22;&#x4EE5;&#x4E0B;&#x6587;&#x4EF6;&#x3002;</p>
<pre><code>/usr/local/lib/node/bar.js
/home/user/projects/node_modules/bar.js
/home/user/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js
</code></pre><p>&#x8FD9;&#x6837;&#x8BBE;&#x8BA1;&#x7684;&#x76EE;&#x7684;&#x662F;&#xFF0C;&#x4F7F;&#x5F97;&#x4E0D;&#x540C;&#x7684;&#x6A21;&#x5757;&#x53EF;&#x4EE5;&#x5C06;&#x6240;&#x4F9D;&#x8D56;&#x7684;&#x6A21;&#x5757;&#x672C;&#x5730;&#x5316;&#x3002;</p>
<p>&#x5982;&#x679C;&#x6307;&#x5B9A;&#x7684;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x6CA1;&#x6709;&#x53D1;&#x73B0;&#xFF0C;Node&#x4F1A;&#x5C1D;&#x8BD5;&#x4E3A;&#x6587;&#x4EF6;&#x540D;&#x6DFB;&#x52A0;.js&#x3001;.json&#x3001;.node&#x540E;&#xFF0C;&#x518D;&#x53BB;&#x641C;&#x7D22;&#x3002;.js&#x4EF6;&#x4F1A;&#x4EE5;&#x6587;&#x672C;&#x683C;&#x5F0F;&#x7684;JavaScript&#x811A;&#x672C;&#x6587;&#x4EF6;&#x89E3;&#x6790;&#xFF0C;.json&#x6587;&#x4EF6;&#x4F1A;&#x4EE5;JSON&#x683C;&#x5F0F;&#x7684;&#x6587;&#x672C;&#x6587;&#x4EF6;&#x89E3;&#x6790;&#xFF0C;.node&#x6587;&#x4EF6;&#x4F1A;&#x4EE5;&#x7F16;&#x8BD1;&#x540E;&#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x89E3;&#x6790;&#x3002;</p>
<p>require&#x5339;&#x914D;&#x6587;&#x4EF6;&#x7684;&#x6D41;&#x7A0B;&#x56FE;&#x4F8B;</p>
<p><img src="../..//img/require.jpg" alt=""></p>
<h2 id="t29npm&#x5305;&#x7BA1;&#x7406;&#x5668;">npm&#x5305;&#x7BA1;&#x7406;&#x5668; <a href="#t29npm&#x5305;&#x7BA1;&#x7406;&#x5668;"> # </a></h2>
<h3 id="t30&#x4ECB;&#x7ECD;">&#x4ECB;&#x7ECD; <a href="#t30&#x4ECB;&#x7ECD;"> # </a></h3>
<p>npm&#x6709;&#x4E24;&#x5C42;&#x542B;&#x4E49;&#xFF1A;</p>
<ul>
<li>Node.js&#x7684;&#x5F00;&#x653E;&#x5F0F;&#x6A21;&#x5757;&#x767B;&#x8BB0;&#x548C;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#xFF0C;&#x7F51;&#x5740;&#x4E3A;<a href="http://npmjs.org">http://npmjs.org</a>&#x3002;</li>
<li>Node.js&#x9ED8;&#x8BA4;&#x7684;&#x6A21;&#x5757;&#x7BA1;&#x7406;&#x5668;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x547D;&#x4EE4;&#x884C;&#x4E0B;&#x7684;&#x8F6F;&#x4EF6;&#xFF0C;&#x7528;&#x6765;&#x5B89;&#x88C5;&#x548C;&#x7BA1;&#x7406;node&#x6A21;&#x5757;&#x3002;</li>
</ul>
<p>NPM&#x662F;&#x968F;&#x540C;NodeJS&#x4E00;&#x8D77;&#x5B89;&#x88C5;&#x7684;&#x5305;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#xFF0C;&#x80FD;&#x89E3;&#x51B3;NodeJS&#x4EE3;&#x7801;&#x90E8;&#x7F72;&#x4E0A;&#x7684;&#x5F88;&#x591A;&#x95EE;&#x9898;&#xFF0C;&#x5E38;&#x89C1;&#x7684;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x6709;&#x4EE5;&#x4E0B;&#x51E0;&#x79CD;&#xFF1A;</p>
<p>&#x5141;&#x8BB8;&#x7528;&#x6237;&#x4ECE;NPM&#x670D;&#x52A1;&#x5668;&#x4E0B;&#x8F7D;&#x522B;&#x4EBA;&#x7F16;&#x5199;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5305;&#x5230;&#x672C;&#x5730;&#x4F7F;&#x7528;&#x3002;
&#x5141;&#x8BB8;&#x7528;&#x6237;&#x4ECE;NPM&#x670D;&#x52A1;&#x5668;&#x4E0B;&#x8F7D;&#x5E76;&#x5B89;&#x88C5;&#x522B;&#x4EBA;&#x7F16;&#x5199;&#x7684;&#x547D;&#x4EE4;&#x884C;&#x7A0B;&#x5E8F;&#x5230;&#x672C;&#x5730;&#x4F7F;&#x7528;&#x3002;
&#x5141;&#x8BB8;&#x7528;&#x6237;&#x5C06;&#x81EA;&#x5DF1;&#x7F16;&#x5199;&#x7684;&#x5305;&#x6216;&#x547D;&#x4EE4;&#x884C;&#x7A0B;&#x5E8F;&#x4E0A;&#x4F20;&#x5230;NPM&#x670D;&#x52A1;&#x5668;&#x4F9B;&#x522B;&#x4EBA;&#x4F7F;&#x7528;&#x3002;</p>
<h3 id="t31&#x5168;&#x5C40;&#x914D;&#x7F6E;">&#x5168;&#x5C40;&#x914D;&#x7F6E; <a href="#t31&#x5168;&#x5C40;&#x914D;&#x7F6E;"> # </a></h3>
<p><code>step1.</code> npm&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;NodeJS&#x7684;&#x6A21;&#x5757;&#x7BA1;&#x7406;&#xFF0C;&#x6211;&#x4EEC;&#x8981;&#x5148;&#x914D;&#x7F6E;npm&#x7684;&#x5168;&#x5C40;&#x6A21;&#x5757;&#x7684;&#x5B58;&#x653E;&#x8DEF;&#x5F84;&#x4EE5;&#x53CA;cache&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x4F8B;&#x5982;&#x6211;&#x5E0C;&#x671B;&#x5C06;&#x4EE5;&#x4E0A;&#x4E24;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x653E;&#x5728;NodeJS&#x7684;&#x4E3B;&#x76EE;&#x5F55;&#x4E0B;&#xFF0C;&#x4FBF;&#x5728;NodeJs&#x4E0B;&#x5EFA;&#x7ACB;<strong>node_global</strong>&#x53CA;<strong>node_cache</strong>&#x4E24;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x3002;&#x6211;&#x4EEC;&#x5C31;&#x5728;cmd&#x4E2D;&#x952E;&#x5165;&#x4E24;&#x884C;&#x547D;&#x4EE4;&#xFF1A;</p>
<pre><code>npm config set prefix &quot;D:\Program Files\nodejs\node_global&quot;
npm config set cache &quot;D:\Program Files\nodejs\node_cache&quot;
</code></pre><p><code>step2.</code> &#x4E0B;&#x9762;&#x8FD9;&#x4E00;&#x6B65;&#x975E;&#x5E38;&#x5173;&#x952E;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x8BBE;&#x7F6E;&#x7CFB;&#x7EDF;&#x53D8;&#x91CF;&#x3002;&#x8FDB;&#x5165;&#x6211;&#x7684;&#x7535;&#x8111;&#x2192;&#x5C5E;&#x6027;&#x2192;&#x9AD8;&#x7EA7;&#x2192;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;</p>
<pre><code>&#x5728;&#x7CFB;&#x7EDF;&#x53D8;&#x91CF;&#x4E0B;&#x65B0;&#x5EFA;&#x201C;NODE_PATH&#x201D;
&#x8F93;&#x5165;&#x5185;&#x5BB9;&#x201C;D:\Program Files\nodejs\node_global\node_modules&#x201D;
</code></pre><p><code>step3.</code> &#x5B89;&#x88C5;bower&#x6216;&#x662F;gulp&#x7B49;&#x5E38;&#x7528;&#x5DE5;&#x5177;</p>
<pre><code>npm install bower gulp -g
</code></pre><p>&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#xFF0C;&#x4F60;&#x5728;&#x547D;&#x4EE4;&#x884C;&#x5C31;&#x53EF;&#x4EE5;&#x5168;&#x5C40;&#x7684;&#x4F7F;&#x7528;&#x5B89;&#x88C5;&#x7684;&#x5DE5;&#x5177;&#x4E86;&#xFF0C;&#x53EF;&#x4EE5;&#x547D;&#x4EE4;&#x884C;&#x4E2D;&#x76F4;&#x63A5;&#x786E;&#x8BA4;</p>
<pre><code>gulp -v
bower -v
</code></pre><p><code>step4.</code> &#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x8FDB;&#x4E00;&#x6B65;&#x5B66;&#x4E60;&#x5982;&#x4F55;&#x7528;npm&#x53D1;&#x5E03;&#x81EA;&#x5DF1;&#x7684;&#x5305;</p>
<pre><code>// &#x521D;&#x59CB;&#x5316;&#x4E00;&#x4E2A;package
npm init
// &#x6DFB;&#x52A0;&#x4F60;&#x7684;&#x5305;&#x7684;&#x7BA1;&#x7406;&#x7528;&#x6237;
npm adduser
// &#x53D1;&#x5E03;&#x4F60;&#x7684;&#x5305;
npm publish --tag 0.1.0
</code></pre><h3 id="t32&#x5B66;&#x4E60;&#x4F7F;&#x7528;">&#x5B66;&#x4E60;&#x4F7F;&#x7528; <a href="#t32&#x5B66;&#x4E60;&#x4F7F;&#x7528;"> # </a></h3>
<ol>
<li><p>npm set
npm set&#x7528;&#x6765;&#x8BBE;&#x7F6E;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;</p>
</li>
<li><p>npm info
npm info&#x547D;&#x4EE4;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x6BCF;&#x4E2A;&#x6A21;&#x5757;&#x7684;&#x5177;&#x4F53;&#x4FE1;&#x606F;</p>
</li>
<li><p>npm search
npm search&#x547D;&#x4EE4;&#x7528;&#x4E8E;&#x641C;&#x7D22;npm&#x4ED3;&#x5E93;&#xFF0C;&#x5B83;&#x540E;&#x9762;&#x53EF;&#x4EE5;&#x8DDF;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x8DDF;&#x6B63;&#x5219;&#x8868;&#x8FBE;&#x5F0F;&#x3002;</p>
</li>
<li><p>npm install
Node&#x6A21;&#x5757;&#x91C7;&#x7528;npm install&#x547D;&#x4EE4;&#x5B89;&#x88C5;&#x3002;&#x6BCF;&#x4E2A;&#x6A21;&#x5757;&#x53EF;&#x4EE5;&#x201C;&#x5168;&#x5C40;&#x5B89;&#x88C5;&#x201D;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x201C;&#x672C;&#x5730;&#x5B89;&#x88C5;&#x201D;&#x3002;&#x4E24;&#x8005;&#x7684;&#x5DEE;&#x5F02;&#x662F;&#x6A21;&#x5757;&#x7684;&#x5B89;&#x88C5;&#x4F4D;&#x7F6E;&#xFF0C;&#x4EE5;&#x53CA;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x3002;</p>
</li>
<li><p>npm update
npm update &#x547D;&#x4EE4;&#x53EF;&#x4EE5;&#x5347;&#x7EA7;&#x672C;&#x5730;&#x5B89;&#x88C5;&#x7684;&#x6A21;&#x5757;&#x3002;</p>
</li>
<li><p>npm uninstall
&#x5378;&#x8F7D;&#x6389;&#x5B89;&#x88C5;&#x7684;&#x6A21;&#x5757;</p>
</li>
<li><p>npm publish
&#x53D1;&#x5E03;&#x4F60;&#x7684;&#x5305;</p>
</li>
<li>npm adduser
&#x7ED9;&#x4F60;&#x7684;&#x5305;&#x6DFB;&#x52A0;&#x7528;&#x6237;&#x4FE1;&#x606F;</li>
<li>npm cache clear
&#x6E05;&#x9664;&#x7F13;&#x5B58;</li>
</ol>
<h1 id="t33Chapter 3 -- Nodejs&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x548C;&#x6838;&#x5FC3;API">Chapter 3 -- Nodejs&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x548C;&#x6838;&#x5FC3;API <a href="#t33Chapter 3 -- Nodejs&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x548C;&#x6838;&#x5FC3;API"> # </a></h1>
<h2 id="t34node&#x4E2D;&#x5E38;&#x7528;&#x7684;&#x5168;&#x5C40;&#x5BF9;&#x8C61;">node&#x4E2D;&#x5E38;&#x7528;&#x7684;&#x5168;&#x5C40;&#x5BF9;&#x8C61; <a href="#t34node&#x4E2D;&#x5E38;&#x7528;&#x7684;&#x5168;&#x5C40;&#x5BF9;&#x8C61;"> # </a></h2>
<blockquote>
<p>&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x8FD0;&#x884C;&#x7684;js&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5168;&#x5C40;&#x5BF9;&#x8C61;window&#xFF0C;&#x540C;&#x6837;&#x7684;&#xFF0C;&#x5728;node&#x4E2D;&#x8FD0;&#x884C;&#x7684;js&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5168;&#x5C40;&#x5BF9;&#x8C61;global&#xFF0C;&#x4E0B;&#x9762;&#x4E00;&#x8D77;&#x4E86;&#x89E3;&#x4E0B;&#x5728;nodejs&#x4E2D;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#x975E;&#x5E38;&#x6709;&#x7528;&#x7684;&#x5168;&#x5C40;&#x5BF9;&#x8C61;&#x3002;</p>
</blockquote>
<p><code>global</code>&#x662F;&#x5168;&#x5C40;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x5BF9;&#x8C61;&#x3002;</p>
<p>&#x8FD9;&#x91CC;&#x9700;&#x8981;&#x8BF4;&#x660E;&#x7684;&#x662F;&#xFF0C;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#xFF0C;&#x9876;&#x7EA7;&#x4F5C;&#x7528;&#x57DF;&#x5C31;&#x662F;&#x5168;&#x5C40;&#x4F5C;&#x7528;&#x57DF;&#x3002;&#x8FD9;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x5F53;&#x524D;&#x662F;&#x5728;&#x5168;&#x5C40;&#x4F5C;&#x7528;&#x57DF;&#x5185;&#xFF0C;var something&#x5C06;&#x4F1A;&#x58F0;&#x660E;&#x4E00;&#x4E2A;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x3002;&#x5728;Node&#x4E2D;&#x5219;&#x4E0D;&#x540C;&#x3002;&#x9876;&#x7EA7;&#x4F5C;&#x7528;&#x57DF;&#x5E76;&#x975E;&#x5168;&#x5C40;&#x4F5C;&#x7528;&#x57DF;&#xFF0C;&#x5728;Node&#x6A21;&#x5757;&#x91CC;&#x7684;var something&#x53EA;&#x5C5E;&#x4E8E;&#x90A3;&#x4E2A;&#x6A21;&#x5757;&#x3002;</p>
<h3 id="t35Console&#x5BF9;&#x8C61;">Console&#x5BF9;&#x8C61; <a href="#t35Console&#x5BF9;&#x8C61;"> # </a></h3>
<p>console &#x7528;&#x4E8E;&#x63D0;&#x4F9B;&#x63A7;&#x5236;&#x53F0;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF0C;&#x5B83;&#x662F;&#x7531; Internet Explorer &#x7684; JScript &#x5F15;&#x64CE;&#x63D0;&#x4F9B;&#x7684;&#x8C03;&#x8BD5;&#x5DE5;&#x5177;&#xFF0C;&#x540E;&#x6765;&#x9010;&#x6E10;&#x6210;&#x4E3A;&#x6D4F;&#x89C8;&#x5668;&#x7684;&#x4E8B;&#x5B9E;&#x6807;&#x51C6;&#x3002; Node.js &#x6CBF;&#x7528;&#x4E86;&#x8FD9;&#x4E2A;&#x6807;&#x51C6;&#xFF0C;&#x63D0;&#x4F9B;&#x4E0E;&#x4E60;&#x60EF;&#x884C;&#x4E3A;&#x4E00;&#x81F4;&#x7684; console &#x5BF9;&#x8C61;&#xFF0C;&#x7528;&#x4E8E;&#x5411;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#x6D41;&#xFF08;stdout&#xFF09;&#x6216;&#x6807;&#x51C6;&#x9519;&#x8BEF;&#x6D41;&#xFF08;stderr&#xFF09;&#x8F93;&#x51FA;&#x5B57;&#x7B26;&#x3002;</p>
<p>console &#x65B9;&#x6CD5; &#x4EE5;&#x4E0B;&#x4E3A; console &#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;:</p>
<ul>
<li>console.log([data][, ...]) &#x5411;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#x6D41;&#x6253;&#x5370;&#x5B57;&#x7B26;&#x5E76;&#x4EE5;&#x6362;&#x884C;&#x7B26;&#x7ED3;&#x675F;&#x3002;&#x8BE5;&#x65B9;&#x6CD5;&#x63A5;&#x6536;&#x82E5;&#x5E72; &#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5982;&#x679C;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5219;&#x8F93;&#x51FA;&#x8FD9;&#x4E2A;&#x53C2;&#x6570;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5F62;&#x5F0F;&#x3002;&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5219; &#x4EE5;&#x7C7B;&#x4F3C;&#x4E8E;C &#x8BED;&#x8A00; printf() &#x547D;&#x4EE4;&#x7684;&#x683C;&#x5F0F;&#x8F93;&#x51FA;&#x3002;</li>
<li>console.info([data][, ...]) P&#x8BE5;&#x547D;&#x4EE4;&#x7684;&#x4F5C;&#x7528;&#x662F;&#x8FD4;&#x56DE;&#x4FE1;&#x606F;&#x6027;&#x6D88;&#x606F;&#xFF0C;&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x4E0E;console.log&#x5DEE;&#x522B;&#x5E76;&#x4E0D;&#x5927;&#xFF0C;&#x9664;&#x4E86;&#x5728;chrome&#x4E2D;&#x53EA;&#x4F1A;&#x8F93;&#x51FA;&#x6587;&#x5B57;&#x5916;&#xFF0C;&#x5176;&#x4F59;&#x7684;&#x4F1A;&#x663E;&#x793A;&#x4E00;&#x4E2A;&#x84DD;&#x8272;&#x7684;&#x60CA;&#x53F9;&#x53F7;&#x3002;</li>
<li>console.error([data][, ...]) &#x8F93;&#x51FA;&#x9519;&#x8BEF;&#x6D88;&#x606F;&#x7684;&#x3002;&#x63A7;&#x5236;&#x53F0;&#x5728;&#x51FA;&#x73B0;&#x9519;&#x8BEF;&#x65F6;&#x4F1A;&#x663E;&#x793A;&#x662F;&#x7EA2;&#x8272;&#x7684;&#x53C9;&#x5B50;&#x3002;</li>
<li>console.warn([data][, ...]) &#x8F93;&#x51FA;&#x8B66;&#x544A;&#x6D88;&#x606F;&#x3002;&#x63A7;&#x5236;&#x53F0;&#x51FA;&#x73B0;&#x6709;&#x9EC4;&#x8272;&#x7684;&#x60CA;&#x53F9;&#x53F7;&#x3002;</li>
<li>console.dir(obj[, options]) &#x7528;&#x6765;&#x5BF9;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x8FDB;&#x884C;&#x68C0;&#x67E5;&#xFF08;inspect&#xFF09;&#xFF0C;&#x5E76;&#x4EE5;&#x6613;&#x4E8E;&#x9605;&#x8BFB;&#x548C;&#x6253;&#x5370;&#x7684;&#x683C;&#x5F0F;&#x663E;&#x793A;&#x3002;</li>
<li>console.time(label) &#x8F93;&#x51FA;&#x65F6;&#x95F4;&#xFF0C;&#x8868;&#x793A;&#x8BA1;&#x65F6;&#x5F00;&#x59CB;&#x3002;</li>
<li>console.timeEnd(label) &#x7ED3;&#x675F;&#x65F6;&#x95F4;&#xFF0C;&#x8868;&#x793A;&#x8BA1;&#x65F6;&#x7ED3;&#x675F;&#x3002;</li>
<li>console.trace(message[, ...]) &#x5F53;&#x524D;&#x6267;&#x884C;&#x7684;&#x4EE3;&#x7801;&#x5728;&#x5806;&#x6808;&#x4E2D;&#x7684;&#x8C03;&#x7528;&#x8DEF;&#x5F84;&#xFF0C;&#x8FD9;&#x4E2A;&#x6D4B;&#x8BD5;&#x51FD;&#x6570;&#x8FD0;&#x884C;&#x5F88;&#x6709;&#x5E2E;&#x52A9;&#xFF0C;&#x53EA;&#x8981;&#x7ED9;&#x60F3;&#x6D4B;&#x8BD5;&#x7684;&#x51FD;&#x6570;&#x91CC;&#x9762;&#x52A0;&#x5165; - console.trace &#x5C31;&#x884C;&#x4E86;&#x3002;</li>
<li>console.assert(value[, message][, ...]) &#x7528;&#x4E8E;&#x5224;&#x65AD;&#x67D0;&#x4E2A;&#x8868;&#x8FBE;&#x5F0F;&#x6216;&#x53D8;&#x91CF;&#x662F;&#x5426;&#x4E3A;&#x771F;&#xFF0C;&#x63A5;&#x624B;&#x4E24;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x8868;&#x8FBE;&#x5F0F;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x5B57;&#x7B26;&#x4E32;&#x3002;&#x53EA;&#x6709;&#x5F53;&#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x4E3A;false&#xFF0C;&#x624D;&#x4F1A;&#x8F93;&#x51FA;&#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5426;&#x5219;&#x4E0D;&#x4F1A;&#x6709;&#x4EFB;&#x4F55;&#x7ED3;&#x679C;&#x3002;</li>
<li>console.log()&#xFF1A;&#x5411;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#x6D41;&#x6253;&#x5370;&#x5B57;&#x7B26;&#x5E76;&#x4EE5;&#x6362;&#x884C;&#x7B26;&#x7ED3;&#x675F;&#x3002; console.log &#x63A5;&#x53D7;&#x82E5;&#x5E72; &#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5982;&#x679C;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5219;&#x8F93;&#x51FA;&#x8FD9;&#x4E2A;&#x53C2;&#x6570;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5F62;&#x5F0F;&#x3002;&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5219; &#x4EE5;&#x7C7B;&#x4F3C;&#x4E8E;C &#x8BED;&#x8A00; printf() &#x547D;&#x4EE4;&#x7684;&#x683C;&#x5F0F;&#x8F93;&#x51FA;&#x3002; &#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709; &#x53C2;&#x6570;&#xFF0C;&#x53EA;&#x6253;&#x5370;&#x4E00;&#x4E2A;&#x6362;&#x884C;&#x3002;</li>
</ul>
<pre><code>console.log(&apos;Hello world&apos;);
console.log(&apos;byvoid%diovyb&apos;);
console.log(&apos;byvoid%diovyb&apos;, 1991);
console.error()&#xFF1A;&#x4E0E;console.log() &#x7528;&#x6CD5;&#x76F8;&#x540C;&#xFF0C;&#x53EA;&#x662F;&#x5411;&#x6807;&#x51C6;&#x9519;&#x8BEF;&#x6D41;&#x8F93;&#x51FA;&#x3002; console.trace()&#xFF1A;&#x5411;&#x6807;&#x51C6;&#x9519;&#x8BEF;&#x6D41;&#x8F93;&#x51FA;&#x5F53;&#x524D;&#x7684;&#x8C03;&#x7528;&#x6808;&#x3002;
</code></pre><h3 id="t36Buffer&#x5BF9;&#x8C61;">Buffer&#x5BF9;&#x8C61; <a href="#t36Buffer&#x5BF9;&#x8C61;"> # </a></h3>
<p>Buffer&#x5BF9;&#x8C61;Node&#x539F;&#x751F;&#x63D0;&#x4F9B;&#x7684;&#x5168;&#x5C40;&#x5BF9;&#x8C61;&#xFF0C;&#x7528;&#x6765;&#x5904;&#x7406;&#x4E8C;&#x8FDB;&#x5236;&#x6570;&#x636E;&#x7684;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#x3002;JavaScript&#x6BD4;&#x8F83;&#x64C5;&#x957F;&#x5904;&#x7406;Unicode&#x6570;&#x636E;&#xFF0C;&#x5BF9;&#x4E8E;&#x5904;&#x7406;&#x4E8C;&#x8FDB;&#x5236;&#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E;&#xFF08;&#x6BD4;&#x5982;TCP&#x6570;&#x636E;&#x6D41;&#xFF09;&#xFF0C;&#x5C31;&#x4E0D;&#x592A;&#x64C5;&#x957F;&#x3002;Buffer&#x5BF9;&#x8C61;&#x5C31;&#x662F;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x800C;&#x63D0;&#x4F9B;&#x7684;&#x3002;&#x8BE5;&#x5BF9;&#x8C61;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x5B83;&#x7684;&#x5B9E;&#x4F8B;&#x4EE3;&#x8868;&#x4E86;V8&#x5F15;&#x64CE;&#x5206;&#x914D;&#x7684;&#x4E00;&#x6BB5;&#x5185;&#x5B58;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x662F;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#xFF0C;&#x6210;&#x5458;&#x90FD;&#x4E3A;&#x6574;&#x6570;&#x503C;&#x3002;</p>
<blockquote>
<p>API&#x8BF4;&#x660E;</p>
</blockquote>
<pre><code class="lang-javascript">{ [<span class="hljs-built_in">Function</span>: Buffer]
  poolSize: <span class="hljs-number">8192</span>,
  isBuffer: [<span class="hljs-built_in">Function</span>: isBuffer],
  compare: [<span class="hljs-built_in">Function</span>: compare],
  isEncoding: [<span class="hljs-built_in">Function</span>],
  concat: [<span class="hljs-built_in">Function</span>],
  byteLength: [<span class="hljs-built_in">Function</span>: byteLength] }
</code></pre>
<p>&#x6682;&#x65F6;&#x5B58;&#x653E;&#x7684;&#x4E00;&#x5757;&#x5185;&#x5B58;&#xFF0C;&#x5904;&#x7406;&#x4E8C;&#x8FDB;&#x5236;&#x7C7B;&#x578B;&#x6587;&#x4EF6;
&#x521B;&#x5EFA;buffer&#x6709;&#x4E09;&#x79CD;&#x529E;&#x6CD5;&#xFF1A;</p>
<ul>
<li><code>new Buffer(size)</code>&#x6307;&#x5B9A;&#x957F;&#x5EA6;&#xFF0C;&#x7136;&#x540E;fill&#x586B;&#x5145;&#x5185;&#x5BB9;</li>
<li><code>new Buffer([&apos;sss&apos;, &apos;xxx&apos;])</code>&#x4F20;&#x5165;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;</li>
<li><code>new Buffer(&apos;&#x90ED;&#x6C38;&#x5CF0;&apos;)</code>&#x4F20;&#x5165;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;</li>
</ul>
<h3 id="t37&#x51E0;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x6A21;&#x5757;&#x5185;&#x90E8;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF;">&#x51E0;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x6A21;&#x5757;&#x5185;&#x90E8;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF; <a href="#t37&#x51E0;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x6A21;&#x5757;&#x5185;&#x90E8;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF;"> # </a></h3>
<p>&#x6A21;&#x5757;&#x5185;&#x90E8;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#xFF0C;&#x6307;&#x5411;&#x7684;&#x5BF9;&#x8C61;&#x6839;&#x636E;&#x6A21;&#x5757;&#x4E0D;&#x540C;&#x800C;&#x4E0D;&#x540C;&#xFF0C;&#x4F46;&#x662F;&#x6240;&#x6709;&#x6A21;&#x5757;&#x90FD;&#x9002;&#x7528;&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x4F5C;&#x662F;&#x4F2A;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#xFF0C; &#x4E3B;&#x8981;&#x4E3A;<strong>filename,</strong>dirname,module, module.exports, exports&#x7B49;&#x3002;</p>
<p><strong>__filename</strong>
&#x6CE8;&#x610F;&#x6B64;&#x5C5E;&#x6027;&#x5E76;&#x4E0D;&#x662F;&#x5168;&#x5C40;&#x5BF9;&#x8C61;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x800C;&#x53EA;&#x662F;node&#x5728;&#x6211;&#x4EEC;&#x6CE8;&#x5165;&#x6A21;&#x5757;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x6A21;&#x5757;&#x5185;&#x76F4;&#x63A5;&#x4F7F;&#x7528;. _filename &#x8868;&#x793A;&#x5F53;&#x524D;&#x6B63;&#x5728;&#x6267;&#x884C;&#x7684;&#x811A;&#x672C;&#x7684;&#x6587;&#x4EF6;&#x540D;&#x3002;&#x5B83;&#x5C06;&#x8F93;&#x51FA;&#x6587;&#x4EF6;&#x6240;&#x5728;&#x4F4D;&#x7F6E;&#x7684;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;</p>
<p> // &#x8F93;&#x51FA;&#x5168;&#x5C40;&#x53D8;&#x91CF; <strong>filename &#x7684;&#x503C;
 console.log( </strong>filename );
<strong>__dirname</strong>
&#x6CE8;&#x610F;&#x6B64;&#x5C5E;&#x6027;&#x5E76;&#x4E0D;&#x662F;&#x5168;&#x5C40;&#x5BF9;&#x8C61;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x800C;&#x53EA;&#x662F;node&#x4E3A;&#x6211;&#x4EEC;&#x6CE8;&#x5165;&#x6A21;&#x5757;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x6A21;&#x5757;&#x5185;&#x76F4;&#x63A5;&#x4F7F;&#x7528;. __dirname &#x8868;&#x793A;&#x5F53;&#x524D;&#x6267;&#x884C;&#x811A;&#x672C;&#x6240;&#x5728;&#x7684;&#x76EE;&#x5F55;&#x3002;</p>
<p>// &#x8F93;&#x51FA;&#x5168;&#x5C40;&#x53D8;&#x91CF; <strong>dirname &#x7684;&#x503C;
console.log( </strong>dirname );
<strong>module</strong>
&#x4EE3;&#x8868;&#x5F53;&#x524D;&#x6A21;&#x5757;&#x672C;&#x8EAB;</p>
<p><strong>exports</strong>
&#x6A21;&#x5757;&#x7684;&#x5BFC;&#x51FA;&#x5BF9;&#x8C61;</p>
<h3 id="t38path&#x5BF9;&#x8C61;">path&#x5BF9;&#x8C61; <a href="#t38path&#x5BF9;&#x8C61;"> # </a></h3>
<p>path.join&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x8FDE;&#x63A5;&#x8DEF;&#x5F84;&#x3002;&#x8BE5;&#x65B9;&#x6CD5;&#x7684;&#x4E3B;&#x8981;&#x7528;&#x9014;&#x5728;&#x4E8E;&#xFF0C;&#x4F1A;&#x6B63;&#x786E;&#x4F7F;&#x7528;&#x5F53;&#x524D;&#x7CFB;&#x7EDF;&#x7684;&#x8DEF;&#x5F84;&#x5206;&#x9694;&#x7B26;&#xFF0C;Unix&#x7CFB;&#x7EDF;&#x662F;&#x201D;/&#x201C;&#xFF0C;Windows&#x7CFB;&#x7EDF;&#x662F;&#x201D;\&#x201C;&#x3002;</p>
<p>API&#x63A5;&#x53E3;&#x6709;&#xFF1A;<code>normalize</code> <code>join</code> <code>resolve</code> <code>parse</code> <code>dirname</code> <code>basename</code> `</p>
<p><strong>path.resolve()</strong>&#xFF1A;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x65B9;&#x6CD5;</p>
<p>path.resolve&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x5C06;&#x76F8;&#x5BF9;&#x8DEF;&#x5F84;&#x8F6C;&#x4E3A;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#x3002;</p>
<p>&#x5B83;&#x53EF;&#x4EE5;&#x63A5;&#x53D7;&#x591A;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x4F9D;&#x6B21;&#x8868;&#x793A;&#x6240;&#x8981;&#x8FDB;&#x5165;&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x76F4;&#x5230;&#x5C06;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x8F6C;&#x4E3A;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#x3002;&#x5982;&#x679C;&#x6839;&#x636E;&#x53C2;&#x6570;&#x65E0;&#x6CD5;&#x5F97;&#x5230;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#xFF0C;&#x5C31;&#x4EE5;&#x5F53;&#x524D;&#x6240;&#x5728;&#x8DEF;&#x5F84;&#x4F5C;&#x4E3A;&#x57FA;&#x51C6;&#x3002;&#x9664;&#x4E86;&#x6839;&#x76EE;&#x5F55;&#xFF0C;&#x8BE5;&#x65B9;&#x6CD5;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#x90FD;&#x4E0D;&#x5E26;&#x5C3E;&#x90E8;&#x7684;&#x659C;&#x6760;&#x3002;</p>
<pre><code>// &#x683C;&#x5F0F;
path.resolve([from ...], to)

// &#x5B9E;&#x4F8B;
path.resolve(&apos;foo/bar&apos;, &apos;/tmp/file/&apos;, &apos;..&apos;, &apos;a/../subfile&apos;)
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x7684;&#x5B9E;&#x4F8B;&#xFF0C;&#x6267;&#x884C;&#x6548;&#x679C;&#x7C7B;&#x4F3C;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x3002;</p>
<p>bash</p>
<p>$ cd foo/bar
$ cd /tmp/file/
$ cd ..
$ cd a/../subfile
$ pwd</p>
<pre><code>path.resolve(&apos;/foo/bar&apos;, &apos;./baz&apos;)
// &apos;/foo/bar/baz&apos;

path.resolve(&apos;/foo/bar&apos;, &apos;/tmp/file/&apos;)
// &apos;/tmp/file&apos;

path.resolve(&apos;wwwroot&apos;, &apos;static_files/png/&apos;, &apos;../gif/image.gif&apos;)
// &#x5982;&#x679C;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x662F;/home/myself/node&#xFF0C;&#x8FD4;&#x56DE;
// /home/myself/node/wwwroot/static_files/gif/image.gif
&#x8BE5;&#x65B9;&#x6CD5;&#x5FFD;&#x7565;&#x975E;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x53C2;&#x6570;&#x3002;
</code></pre><h3 id="t39stream&#x6D41;&#x5BF9;&#x8C61;">stream&#x6D41;&#x5BF9;&#x8C61; <a href="#t39stream&#x6D41;&#x5BF9;&#x8C61;"> # </a></h3>
<p>Stream&#x628A;&#x8F83;&#x5927;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x62C6;&#x6210;&#x5F88;&#x5C0F;&#x7684;&#x90E8;&#x5206;&#x3002;&#x53EA;&#x8981;&#x547D;&#x4EE4;&#x90E8;&#x7F72;&#x4E86;Stream&#x63A5;&#x53E3;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x628A;&#x4E00;&#x4E2A;&#x6D41;&#x7684;&#x8F93;&#x51FA;&#x63A5;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x6D41;&#x7684;&#x8F93;&#x5165;&#x3002;Node&#x5F15;&#x5165;&#x4E86;&#x8FD9;&#x4E2A;&#x6982;&#x5FF5;&#xFF0C;&#x901A;&#x8FC7;Stream&#x4E3A;&#x5F02;&#x6B65;&#x8BFB;&#x5199;&#x6570;&#x636E;&#x63D0;&#x4F9B;&#x7684;&#x7EDF;&#x4E00;&#x63A5;&#x53E3;&#x3002;&#x65E0;&#x8BBA;&#x662F;&#x786C;&#x76D8;&#x6570;&#x636E;&#x3001;&#x7F51;&#x7EDC;&#x6570;&#x636E;&#xFF0C;&#x8FD8;&#x662F;&#x5185;&#x5B58;&#x6570;&#x636E;&#xFF0C;&#x90FD;&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x8BFB;&#x5199;&#x3002;</p>
<p>&#x540E;&#x9762;&#x63A5;&#x89E6;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;fs&#x5C31;&#x662F;&#x57FA;&#x4E8E;stream&#x6765;&#x5B9E;&#x73B0;&#xFF0C;&#x6BD4;&#x8F83;&#x5E38;&#x7528;&#x7684;&#x6784;&#x5EFA;&#x5DE5;&#x5177;gulp&#x4E5F;&#x662F;&#x57FA;&#x4E8E;&#x6D41;&#x6765;&#x5DE5;&#x4F5C;&#x7684;&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x5178;&#x578B;&#x7684;&#x5199;&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#xFF1A;</p>
<pre><code>var http = require(&apos;http&apos;);
var fs = require(&apos;fs&apos;);

var server = http.createServer(function (req, res) {
  fs.readFile(__dirname + &apos;/data.txt&apos;, function (err, data) {
    res.end(data);
  });
});

server.listen(8000);
</code></pre><p>Stream&#x63A5;&#x53E3;&#x5206;&#x6210;&#x4E09;&#x7C7B;&#x3002;</p>
<ul>
<li>&#x53EF;&#x8BFB;&#x6570;&#x636E;&#x6D41;&#x63A5;&#x53E3;&#xFF0C;&#x7528;&#x4E8E;&#x8BFB;&#x53D6;&#x6570;&#x636E;&#x3002;</li>
</ul>
<pre><code>var Readable = require(&apos;stream&apos;).Readable;

var rs = new Readable; rs.push(&apos;beep &apos;); rs.push(&apos;boop\n&apos;); rs.push(null);

rs.pipe(process.stdout);
</code></pre><ul>
<li>&#x53EF;&#x5199;&#x6570;&#x636E;&#x6D41;&#x63A5;&#x53E3;&#xFF0C;&#x7528;&#x4E8E;&#x5199;&#x5165;&#x6570;&#x636E;&#x3002;</li>
</ul>
<pre><code>var fs = require(&apos;fs&apos;); var readableStream = fs.createReadStream(&apos;file1.txt&apos;); var writableStream = fs.createWriteStream(&apos;file2.txt&apos;);

readableStream.setEncoding(&apos;utf8&apos;);

readableStream.on(&apos;data&apos;, function(chunk) { writableStream.write(chunk); });
</code></pre><ul>
<li>&#x53CC;&#x5411;&#x6570;&#x636E;&#x6D41;&#x63A5;&#x53E3;&#xFF0C;&#x7528;&#x4E8E;&#x8BFB;&#x53D6;&#x548C;&#x5199;&#x5165;&#x6570;&#x636E;&#xFF0C;&#x6BD4;&#x5982;Node&#x7684;tcp&#x3001;sockets&#x3001;zlib&#x3001;crypto&#x90FD;&#x90E8;&#x7F72;&#x4E86;&#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x3002;</li>
</ul>
<h3 id="t40process">process <a href="#t40process"> # </a></h3>
<p>API&#x63A5;&#x53E3;&#xFF1A;argv pid kill stdout stderr strin console nextTick &#x7B49;</p>
<p>process &#x662F;&#x4E00;&#x4E2A;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#xFF0C;&#x5373; global &#x5BF9;&#x8C61;&#x7684;&#x5C5E;&#x6027;&#x3002; &#x5B83;&#x7528;&#x4E8E;&#x63CF;&#x8FF0;&#x5F53;&#x524D;Node.js &#x8FDB;&#x7A0B;&#x72B6;&#x6001;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x4E0E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x7B80;&#x5355;&#x63A5;&#x53E3;&#x3002;&#x901A;&#x5E38;&#x5728;&#x4F60;&#x5199;&#x672C;&#x5730;&#x547D;&#x4EE4;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5C11;&#x4E0D;&#x4E86;&#x8981; &#x548C;&#x5B83;&#x6253;&#x4EA4;&#x9053;&#x3002;&#x4E0B;&#x9762;&#x5C06;&#x4F1A;&#x4ECB;&#x7ECD; process &#x5BF9;&#x8C61;&#x7684;&#x4E00;&#x4E9B;&#x6700;&#x5E38;&#x7528;&#x7684;&#x6210;&#x5458;&#x65B9;&#x6CD5;&#x3002;</p>
<p><strong>process.arg</strong>
&#x662F;&#x547D;&#x4EE4;&#x884C;&#x53C2;&#x6570;&#x6570;&#x7EC4;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x662F;node.exe&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x7684;&#x8DEF;&#x5F84;,&#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x6267;&#x884C;&#x7684;&#x811A;&#x672C;&#x6587;&#x4EF6;&#x6240;&#x6709;&#x8DEF;&#x5F84;&#xFF0C;&#x4ECE;&#x7B2C;&#x4E09;&#x4E2A;&#x5143;&#x7D20;&#x5F00;&#x59CB;&#x6BCF;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x4E00;&#x4E2A;&#x8FD0;&#x884C;&#x65F6;&#x4F20;&#x5165;&#x7684;&#x53C2;&#x6570;</p>
<p>console.log(process.argv);
&#x4EE5;&#x5C06;&#x4E0A;&#x4EE3;&#x7801;&#x4FDD;&#x5B58;&#x4E3A;argv.js,&#x7136;&#x540E;&#x8FD0;&#x884C;</p>
<pre><code>E:\nodejs\test&gt;node argv.js test input
</code></pre><p>&#x5F97;&#x5230;&#x7ED3;&#x679C;</p>
<pre><code>[ &apos;C:\\Program Files\\nodejs\\node.exe&apos;,
  &apos;E:\\testjus\\argv.js&apos;,
  &apos;test&apos;,
  &apos;input&apos; ]
</code></pre><p><strong>process.stdout</strong>
&#x6807;&#x51C6;&#x8F93;&#x51FA;&#x6D41;&#xFF0C;&#x901A;&#x5E38;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x7684;console.log&#x5F80;&#x6807;&#x51C6;&#x8F93;&#x51FA;&#x6253;&#x5370;&#x5B57;&#x7B26;&#xFF0C;&#x5176;&#x5B9E;&#x8C03;&#x7528;&#x7684;&#x5C31;&#x662F;process.stdout.write()&#x51FD;&#x6570;</p>
<p><strong>process.stdin</strong>
&#x6807;&#x51C6;&#x8F93;&#x5165;&#x6D41;&#xFF0C;&#x521D;&#x59CB;&#x65F6;&#x5B83;&#x662F;&#x6682;&#x505C;&#x7684;&#xFF0C;&#x8981;&#x60F3;&#x4ECE;&#x6807;&#x51C6;&#x8F93;&#x5165;&#x8BFB;&#x53D6;&#x6570;&#x636E;&#xFF0C;&#x5FC5;&#x987B;&#x6062;&#x590D;&#x6D41;&#xFF0C;&#x5E76;&#x624B;&#x52A8;&#x7F16;&#x5199;&#x6D41;&#x7684;&#x4E8B;&#x4EF6;&#x54CD;&#x5E94;&#x51FD;&#x6570;&#x3002;</p>
<pre><code>process.stdin.resume();

process.stdin.on(&apos;data&apos;,function(data){
  process.stdout.write(&apos;&#x4ECE;&#x63A7;&#x5236;&#x53F0;&#x8BFB;&#x5165;&#x7528;&#x6237;&#x8F93;&#x5165;&#x7684;&#x5B57;&#x7B26;&apos;+data.toString());
});
</code></pre><h2 id="t41&#x5B66;&#x4E60;node&#x4E2D;&#x7684;&#x6838;&#x5FC3;&#x6A21;&#x5757;">&#x5B66;&#x4E60;node&#x4E2D;&#x7684;&#x6838;&#x5FC3;&#x6A21;&#x5757; <a href="#t41&#x5B66;&#x4E60;node&#x4E2D;&#x7684;&#x6838;&#x5FC3;&#x6A21;&#x5757;"> # </a></h2>
<h3 id="t42Fs&#x6A21;&#x5757;">Fs&#x6A21;&#x5757; <a href="#t42Fs&#x6A21;&#x5757;"> # </a></h3>
<p>fs&#x662F;filesystem&#x7684;&#x7F29;&#x5199;&#xFF0C;&#x8BE5;&#x6A21;&#x5757;&#x63D0;&#x4F9B;&#x672C;&#x5730;&#x6587;&#x4EF6;&#x7684;&#x8BFB;&#x5199;&#x80FD;&#x529B;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x662F;POSIX&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#x547D;&#x4EE4;&#x7684;&#x7B80;&#x5355;&#x5305;&#x88C5;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x8FD9;&#x4E2A;&#x6A21;&#x5757;&#x51E0;&#x4E4E;&#x5BF9;&#x6240;&#x6709;&#x64CD;&#x4F5C;&#x63D0;&#x4F9B;&#x5F02;&#x6B65;&#x548C;&#x540C;&#x6B65;&#x4E24;&#x79CD;&#x64CD;&#x4F5C;&#x65B9;&#x5F0F;&#xFF0C;&#x4F9B;&#x5F00;&#x53D1;&#x8005;&#x9009;&#x62E9;&#x3002;</p>
<p>readFileSync()
readFileSync&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x540C;&#x6B65;&#x8BFB;&#x53D6;&#x6587;&#x4EF6;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x3002;</p>
<pre><code>var text = fs.readFileSync(fileName, &quot;utf8&quot;);

// &#x5C06;&#x6587;&#x4EF6;&#x6309;&#x884C;&#x62C6;&#x6210;&#x6570;&#x7EC4;
text.split(/\r?\n/).forEach(function (line) {
  // ...
});
</code></pre><p>writeFileSync()
writeFileSync&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x540C;&#x6B65;&#x5199;&#x5165;&#x6587;&#x4EF6;&#x3002;</p>
<pre><code>fs.writeFileSync(fileName, str, &apos;utf8&apos;);
</code></pre><p>mkdir()&#xFF0C;writeFile()&#xFF0C;readfile()
mkdir&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x65B0;&#x5EFA;&#x76EE;&#x5F55;&#x3002;</p>
<pre><code>var fs = require(&apos;fs&apos;);

fs.mkdir(&apos;./helloDir&apos;,0777, function (err) {
  if (err) throw err;
});
</code></pre><p>mkdir&#x63A5;&#x53D7;&#x4E09;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x662F;&#x76EE;&#x5F55;&#x540D;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x662F;&#x6743;&#x9650;&#x503C;&#xFF0C;&#x7B2C;&#x4E09;&#x4E2A;&#x662F;&#x56DE;&#x8C03;&#x51FD;&#x6570;&#x3002;</p>
<p>writeFile&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x5199;&#x5165;&#x6587;&#x4EF6;&#x3002;</p>
<pre><code>var fs = require(&apos;fs&apos;);

fs.writeFile(&apos;./helloDir/message.txt&apos;, &apos;Hello Node&apos;, function (err) {
  if (err) throw err;
  console.log(&apos;&#x6587;&#x4EF6;&#x5199;&#x5165;&#x6210;&#x529F;&apos;);
});
</code></pre><p>readfile&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x8BFB;&#x53D6;&#x6587;&#x4EF6;&#x5185;&#x5BB9;&#x3002;</p>
<pre><code>var fs = require(&apos;fs&apos;);

fs.readFile(&apos;./helloDir/message.txt&apos;,&apos;UTF-8&apos; ,function (err, data) {
  if (err) throw err;
  console.log(data);
});
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x4F7F;&#x7528;readFile&#x65B9;&#x6CD5;&#x8BFB;&#x53D6;&#x6587;&#x4EF6;&#x3002;readFile&#x65B9;&#x6CD5;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x6587;&#x4EF6;&#x540D;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x6587;&#x4EF6;&#x7F16;&#x7801;&#xFF0C;&#x7B2C;&#x4E09;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x56DE;&#x8C03;&#x51FD;&#x6570;&#x3002;&#x53EF;&#x7528;&#x7684;&#x6587;&#x4EF6;&#x7F16;&#x7801;&#x5305;&#x62EC;&#x201C;ascii&#x201D;&#x3001;&#x201C;utf8&#x201D;&#x548C;&#x201C;base64&#x201D;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x6307;&#x5B9A;&#x6587;&#x4EF6;&#x7F16;&#x7801;&#xFF0C;&#x8FD4;&#x56DE;&#x7684;&#x662F;&#x539F;&#x59CB;&#x7684;&#x7F13;&#x5B58;&#x4E8C;&#x8FDB;&#x5236;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x65F6;&#x9700;&#x8981;&#x8C03;&#x7528;buffer&#x5BF9;&#x8C61;&#x7684;toString&#x65B9;&#x6CD5;&#xFF0C;&#x5C06;&#x5176;&#x8F6C;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x3002;</p>
<pre><code>var fs = require(&apos;fs&apos;);
fs.readFile(&apos;example_log.txt&apos;, function (err, logData) {
  if (err) throw err;
  var text = logData.toString();
});
</code></pre><p>readFile&#x65B9;&#x6CD5;&#x662F;&#x5F02;&#x6B65;&#x64CD;&#x4F5C;&#xFF0C;&#x6240;&#x4EE5;&#x5FC5;&#x987B;&#x5C0F;&#x5FC3;&#xFF0C;&#x4E0D;&#x8981;&#x540C;&#x65F6;&#x53D1;&#x8D77;&#x591A;&#x4E2A;readFile&#x8BF7;&#x6C42;&#x3002;</p>
<pre><code>for(var i = 1; i &lt;= 1000; i++) {
  fs.readFile(&apos;./&apos;+i+&apos;.txt&apos;, function() {
     // do something with the file
  });
}
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x4F1A;&#x540C;&#x65F6;&#x53D1;&#x8D77;1000&#x4E2A;readFile&#x5F02;&#x6B65;&#x8BF7;&#x6C42;&#xFF0C;&#x5F88;&#x5FEB;&#x5C31;&#x4F1A;&#x8017;&#x5C3D;&#x7CFB;&#x7EDF;&#x8D44;&#x6E90;&#x3002;</p>
<h3 id="t43Http&#x6A21;&#x5757;">Http&#x6A21;&#x5757; <a href="#t43Http&#x6A21;&#x5757;"> # </a></h3>
<p>Http&#x6A21;&#x5757;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x642D;&#x5EFA;HTTP&#x670D;&#x52A1;&#x3002;&#x4F7F;&#x7528;Node.js&#x642D;&#x5EFA;HTTP&#x670D;&#x52A1;&#x5668;&#x975E;&#x5E38;&#x7B80;&#x5355;&#x3002;</p>
<ul>
<li>&#x5904;&#x7406;GET&#x8BF7;&#x6C42;</li>
</ul>
<pre><code>var http = require(&quot;http&quot;);

http.createServer(function(req, res) {

// &#x4E3B;&#x9875;
if (req.url == &quot;/&quot;) {
  res.writeHead(200, { &quot;Content-Type&quot;: &quot;text/html&quot; });
  res.end(&quot;Welcome to the homepage!&quot;);
}

// About&#x9875;&#x9762;
else if (req.url == &quot;/about&quot;) {
  res.writeHead(200, { &quot;Content-Type&quot;: &quot;text/html&quot; });
  res.end(&quot;Welcome to the about page!&quot;);
}

// 404&#x9519;&#x8BEF;
else {
  res.writeHead(404, { &quot;Content-Type&quot;: &quot;text/plain&quot; });
  res.end(&quot;404 error! File not found.&quot;);
}
}).listen(8080, &quot;localhost&quot;);
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x7B2C;&#x4E00;&#x884C;var http = require(&quot;http&quot;)&#xFF0C;&#x8868;&#x793A;&#x52A0;&#x8F7D;http&#x6A21;&#x5757;&#x3002;&#x7136;&#x540E;&#xFF0C;&#x8C03;&#x7528;http&#x6A21;&#x5757;&#x7684;createServer&#x65B9;&#x6CD5;&#xFF0C;&#x521B;&#x9020;&#x4E00;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#x5B9E;&#x4F8B;&#xFF0C;&#x5C06;&#x5B83;&#x8D4B;&#x7ED9;&#x53D8;&#x91CF;http&#x3002;</p>
<p>ceateServer&#x65B9;&#x6CD5;&#x63A5;&#x53D7;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x4F5C;&#x4E3A;&#x53C2;&#x6570;&#xFF0C;&#x8BE5;&#x51FD;&#x6570;&#x7684;request&#x53C2;&#x6570;&#x662F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x8868;&#x793A;&#x5BA2;&#x6237;&#x7AEF;&#x7684;HTTP&#x8BF7;&#x6C42;&#xFF1B;response&#x53C2;&#x6570;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x8868;&#x793A;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x7684;HTTP&#x56DE;&#x5E94;&#x3002;response.writeHead&#x65B9;&#x6CD5;&#x8868;&#x793A;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x56DE;&#x5E94;&#x4E00;&#x4E2A;HTTP&#x5934;&#x4FE1;&#x606F;&#xFF1B;response.end&#x65B9;&#x6CD5;&#x8868;&#x793A;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x56DE;&#x5E94;&#x7684;&#x5177;&#x4F53;&#x5185;&#x5BB9;&#xFF0C;&#x4EE5;&#x53CA;&#x56DE;&#x5E94;&#x5B8C;&#x6210;&#x540E;&#x5173;&#x95ED;&#x672C;&#x6B21;&#x5BF9;&#x8BDD;&#x3002;&#x6700;&#x540E;&#x7684;listen(8080)&#x8868;&#x793A;&#x542F;&#x52A8;&#x670D;&#x52A1;&#x5668;&#x5B9E;&#x4F8B;&#xFF0C;&#x76D1;&#x542C;&#x672C;&#x673A;&#x7684;8080&#x7AEF;&#x53E3;&#x3002;</p>
<p>&#x5C06;&#x4E0A;&#x9762;&#x8FD9;&#x51E0;&#x884C;&#x4EE3;&#x7801;&#x4FDD;&#x5B58;&#x6210;&#x6587;&#x4EF6;app.js&#xFF0C;&#x7136;&#x540E;&#x7528;node&#x8C03;&#x7528;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x5C31;&#x5F00;&#x59CB;&#x8FD0;&#x884C;&#x4E86;&#x3002;</p>
<ul>
<li>&#x5904;&#x7406;POST&#x8BF7;&#x6C42;</li>
</ul>
<p>&#x5F53;&#x5BA2;&#x6237;&#x7AEF;&#x91C7;&#x7528;POST&#x65B9;&#x6CD5;&#x53D1;&#x9001;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x53EF;&#x4EE5;&#x5BF9;data&#x548C;end&#x4E24;&#x4E2A;&#x4E8B;&#x4EF6;&#xFF0C;&#x8BBE;&#x7ACB;&#x76D1;&#x542C;&#x51FD;&#x6570;&#x3002;</p>
<pre><code>var http = require(&apos;http&apos;);

http.createServer(function (req, res) { var content = &quot;&quot;;

req.on(&apos;data&apos;, function (chunk) {
  content += chunk;
});

req.on(&apos;end&apos;, function () {
  res.writeHead(200, {&quot;Content-Type&quot;: &quot;text/plain&quot;});
  res.write(&quot;You&apos;ve sent: &quot; + content);
  res.end();
});
}).listen(8080);
</code></pre><p><strong>&#x6A21;&#x5757;&#x5C5E;&#x6027;</strong></p>
<p>&#xFF08;1&#xFF09;HTTP&#x8BF7;&#x6C42;&#x7684;&#x5C5E;&#x6027;</p>
<pre><code>headers&#xFF1A;HTTP&#x8BF7;&#x6C42;&#x7684;&#x5934;&#x4FE1;&#x606F;&#x3002;
url&#xFF1A;&#x8BF7;&#x6C42;&#x7684;&#x8DEF;&#x5F84;&#x3002;
</code></pre><p><strong>&#x6A21;&#x5757;&#x65B9;&#x6CD5;</strong></p>
<p>&#xFF08;1&#xFF09;http&#x6A21;&#x5757;&#x7684;&#x65B9;&#x6CD5;</p>
<pre><code>createServer(callback)&#xFF1A;&#x521B;&#x9020;&#x670D;&#x52A1;&#x5668;&#x5B9E;&#x4F8B;&#x3002;
</code></pre><p>&#xFF08;2&#xFF09;&#x670D;&#x52A1;&#x5668;&#x5B9E;&#x4F8B;&#x7684;&#x65B9;&#x6CD5;</p>
<pre><code>listen(port)&#xFF1A;&#x542F;&#x52A8;&#x670D;&#x52A1;&#x5668;&#x76D1;&#x542C;&#x6307;&#x5B9A;&#x7AEF;&#x53E3;&#x3002;
</code></pre><p>&#xFF08;3&#xFF09;HTTP&#x56DE;&#x5E94;&#x7684;&#x65B9;&#x6CD5;</p>
<pre><code>setHeader(key, value)&#xFF1A;&#x6307;&#x5B9A;HTTP&#x5934;&#x4FE1;&#x606F;&#x3002;
write(str)&#xFF1A;&#x6307;&#x5B9A;HTTP&#x56DE;&#x5E94;&#x7684;&#x5185;&#x5BB9;&#x3002;
end()&#xFF1A;&#x53D1;&#x9001;HTTP&#x56DE;&#x5E94;&#x3002;
</code></pre><h3 id="t44Events&#x6A21;&#x5757;&#x548C;&#x5F02;&#x6B65;&#x7F16;&#x7A0B;">Events&#x6A21;&#x5757;&#x548C;&#x5F02;&#x6B65;&#x7F16;&#x7A0B; <a href="#t44Events&#x6A21;&#x5757;&#x548C;&#x5F02;&#x6B65;&#x7F16;&#x7A0B;"> # </a></h3>
<p>Events&#x6A21;&#x5757;&#x662F;node.js&#x5BF9;&#x201C;&#x53D1;&#x5E03;/&#x8BA2;&#x9605;&#x201D;&#x6A21;&#x5F0F;&#xFF08;publish/subscribe&#xFF09;&#x7684;&#x90E8;&#x7F72;&#x3002;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x6A21;&#x5757;&#xFF0C;&#x5411;&#x53E6;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x4F20;&#x9012;&#x6D88;&#x606F;&#x3002;&#x8BE5;&#x6A21;&#x5757;&#x901A;&#x8FC7;EventEmitter&#x5C5E;&#x6027;&#xFF0C;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;&#x8BE5;&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684;&#x5B9E;&#x4F8B;&#x5177;&#x6709;on&#x65B9;&#x6CD5;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x76D1;&#x542C;&#x6307;&#x5B9A;&#x4E8B;&#x4EF6;&#xFF0C;&#x5E76;&#x89E6;&#x53D1;&#x56DE;&#x8C03;&#x51FD;&#x6570;&#x3002;&#x4EFB;&#x610F;&#x5BF9;&#x8C61;&#x90FD;&#x53EF;&#x4EE5;&#x53D1;&#x5E03;&#x6307;&#x5B9A;&#x4E8B;&#x4EF6;&#xFF0C;&#x88AB;EventEmitter&#x5B9E;&#x4F8B;&#x7684;on&#x65B9;&#x6CD5;&#x76D1;&#x542C;&#x5230;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x662F;&#x4E00;&#x4E2A;&#x5B9E;&#x4F8B;&#xFF0C;&#x5148;&#x5EFA;&#x7ACB;&#x4E00;&#x4E2A;&#x6D88;&#x606F;&#x4E2D;&#x5FC3;&#xFF0C;&#x7136;&#x540E;&#x901A;&#x8FC7;on&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x5404;&#x79CD;&#x4E8B;&#x4EF6;&#x6307;&#x5B9A;&#x56DE;&#x8C03;&#x51FD;&#x6570;&#xFF0C;&#x4ECE;&#x800C;&#x5C06;&#x7A0B;&#x5E8F;&#x8F6C;&#x4E3A;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x578B;&#xFF0C;&#x5404;&#x4E2A;&#x6A21;&#x5757;&#x4E4B;&#x95F4;&#x901A;&#x8FC7;&#x4E8B;&#x4EF6;&#x8054;&#x7CFB;&#x3002;</p>
<pre><code>var EventEmitter = require(&quot;events&quot;).EventEmitter;

var ee = new EventEmitter();
ee.on(&quot;someEvent&quot;, function () {
  console.log(&quot;event has occured&quot;);
});

ee.emit(&quot;someEvent&quot;);
</code></pre><p>Events&#x6A21;&#x5757;&#x7684;&#x4F5C;&#x7528;&#xFF0C;&#x8FD8;&#x5728;&#x4E8E;&#x5176;&#x4ED6;&#x6A21;&#x5757;&#x53EF;&#x4EE5;&#x90E8;&#x7F72;EventEmitter&#x63A5;&#x53E3;&#xFF0C;&#x4ECE;&#x800C;&#x4E5F;&#x80FD;&#x591F;&#x8BA2;&#x9605;&#x548C;&#x53D1;&#x5E03;&#x6D88;&#x606F;&#x3002;</p>
<pre><code>var EventEmitter = require(&apos;events&apos;).EventEmitter;

function Dog(name) {
  this.name = name;
}

Dog.prototype.__proto__ = EventEmitter.prototype;
// &#x53E6;&#x4E00;&#x79CD;&#x5199;&#x6CD5;
// Dog.prototype = Object.create(EventEmitter.prototype);

var simon = new Dog(&apos;simon&apos;);

simon.on(&apos;bark&apos;, function(){
  console.log(this.name + &apos; barked&apos;);
});

setInterval(function(){
  simon.emit(&apos;bark&apos;);
}, 500);
</code></pre><p>&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x65B0;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x6784;&#x9020;&#x51FD;&#x6570;Dog&#xFF0C;&#x7136;&#x540E;&#x8BA9;&#x5176;&#x7EE7;&#x627F;EventEmitter&#xFF0C;&#x56E0;&#x6B64;Dog&#x5C31;&#x62E5;&#x6709;&#x4E86;EventEmitter&#x7684;&#x63A5;&#x53E3;&#x3002;&#x6700;&#x540E;&#xFF0C;&#x4E3A;Dog&#x7684;&#x5B9E;&#x4F8B;&#x6307;&#x5B9A;bark&#x4E8B;&#x4EF6;&#x7684;&#x76D1;&#x542C;&#x51FD;&#x6570;&#xFF0C;&#x518D;&#x4F7F;&#x7528;EventEmitter&#x7684;emit&#x65B9;&#x6CD5;&#xFF0C;&#x89E6;&#x53D1;bark&#x4E8B;&#x4EF6;&#x3002;</p>
<h1 id="t45Chapter 4 -- Node.js&#x5F00;&#x53D1;&#x5B9E;&#x6218;">Chapter 4 -- Node.js&#x5F00;&#x53D1;&#x5B9E;&#x6218; <a href="#t45Chapter 4 -- Node.js&#x5F00;&#x53D1;&#x5B9E;&#x6218;"> # </a></h1>
<blockquote>
<p>&#x5BFC;&#x8BFB;&#xFF1A;&#x901A;&#x8FC7;&#x5BF9;express&#x3001;jade&#x3001;angular&#x3001;mongodb&#x7B49;&#x6280;&#x672F;&#x7ED3;&#x5408;&#x7684;&#x4E00;&#x4E2A;&#x793A;&#x4F8B;&#x4EE3;&#x7801;&#xFF0C;&#x548C;&#x5927;&#x5BB6;&#x5206;&#x4EAB;&#x6D89;&#x53CA;&#x7684;&#x6280;&#x672F;&#x70B9;&#x3002;</p>
</blockquote>
<h2 id="t46express&#x7684;&#x4F7F;&#x7528;">express&#x7684;&#x4F7F;&#x7528; <a href="#t46express&#x7684;&#x4F7F;&#x7528;"> # </a></h2>
<h3 id="t47&#x4ECB;&#x7ECD;">&#x4ECB;&#x7ECD; <a href="#t47&#x4ECB;&#x7ECD;"> # </a></h3>
<p>&#x57FA;&#x4E8E; Node.js &#x5E73;&#x53F0;&#xFF0C;&#x5FEB;&#x901F;&#x3001;&#x5F00;&#x653E;&#x3001;&#x6781;&#x7B80;&#x7684; web &#x5F00;&#x53D1;&#x6846;&#x67B6;&#x3002;</p>
<h3 id="t48&#x5B89;&#x88C5;">&#x5B89;&#x88C5; <a href="#t48&#x5B89;&#x88C5;"> # </a></h3>
<pre><code>npm install express express-generator -g
</code></pre><h3 id="t49&#x751F;&#x6210;&#x9879;&#x76EE;&#x811A;&#x624B;&#x67B6;&#x4EE3;&#x7801;">&#x751F;&#x6210;&#x9879;&#x76EE;&#x811A;&#x624B;&#x67B6;&#x4EE3;&#x7801; <a href="#t49&#x751F;&#x6210;&#x9879;&#x76EE;&#x811A;&#x624B;&#x67B6;&#x4EE3;&#x7801;"> # </a></h3>
<pre><code>express myapp
</code></pre><h2 id="t50ejs">ejs <a href="#t50ejs"> # </a></h2>
<p>jade&#x672C;&#x8EAB;&#x662F;&#x57FA;&#x4E8E;nodejs&#x5F00;&#x53D1;&#x7684;&#x6A21;&#x677F;&#x5F15;&#x64CE;</p>
<h2 id="t51angular">angular <a href="#t51angular"> # </a></h2>
<p>angular&#x662F;&#x4E00;&#x4E2A;&#x524D;&#x7AEF;MVC&#x6846;&#x67B6;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;&#x4F1A;&#x548C;&#x5927;&#x5BB6;&#x7B80;&#x5355;&#x4ECB;&#x7ECD;&#x57FA;&#x4E8E;nodejs&#x7684;&#x9879;&#x76EE;&#x5BF9;angular&#x7684;&#x4F7F;&#x7528;</p>
<h2 id="t52mongodb">mongodb <a href="#t52mongodb"> # </a></h2>
<p>mongodb&#x662F;&#x76EE;&#x524D;&#x6D41;&#x884C;&#x7684;noSQL&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x56E0;&#x5176;&#x7B80;&#x5355;&#x5B9E;&#x7528;&#x800C;&#x6D41;&#x884C;&#x3002;</p>

        <div class="copyright">Powered by <a href="https://github.com/jaywcjlove/idoc" target="_blank">idoc</a>. Dependence <a href="https://nodejs.org">Node.js</a> run.</div>
    </div>

</div>


</body>
</html>
